Process.Start() работает под Win7 и Win8, но не под Windows 2012 R2

Моя программа, запущенная через службу Windows, смогла успешно запустить следующий код под Win7 и Win8.

Log("About to run the file...");
try
{
    Process.Start(filePath, args);
    Log("File Triggered!");
}
catch (Exception ex)
{
    Log("Error.");
}

Хотя UI программы, расположенной по адресу filePath, никогда не показывалось, но программа выполняла свою работу полностью в фоновом режиме.

Когда я пробую ту же самую программу в среде Windows 2012 R2, я замечаю, что после получения первого сообщения журнала выше в моем файле журнала («О запуске файла ...») больше ничего не регистрируется, и Process.Start() тоже не работает. . Это сбивает с толку, потому что точно такая же программа работала в других операционных системах.

Итак, если Process.Start() не вызывается успешно, почему я не получаю сообщение «Ошибка» в своем журнале, и если Process.Start() запускается, почему я не получаю «Файл запущен!» сообщение?

Обновление: Следуя комментариям, я запустил Process Monitor, и это журнал, сгенерированный для целевого .exe-файла именно в ту минуту, когда он должен был запуститься. Пожалуйста, посмотрите и убедитесь, что вы не нашли ничего подозрительного:

Ссылка на электронную таблицу журнала в Документах Google


person disasterkid    schedule 21.04.2015    source источник


Ответы (3)



  1. Что находится в средстве просмотра процессов — вы видите, что ваш процесс запускается?
  2. Что находится в журнале событий Windows?
  3. Win2012, вероятно, более строг в отношении безопасности и вашего приложения (выполняется из службы, поэтому довольно специфичен для пользователя). Вы можете попробовать использовать FileMon/ProcessMonitor от SysInternals, чтобы проверить, на каком вызове происходит сбой или зависание.

И общий совет: запуск пользовательского интерфейса из службы в Windows — не лучшая практика. Службы создаются для выполнения некоторой фоновой работы, а не для взаимодействия с пользователем. Если вам нужен пользовательский интерфейс для вашего сервиса, лучше создайте пользовательский интерфейс, который пользователь запустит сам, или создайте небольшое приложение, которое будет находиться в трее и ждать события от службы, а затем запустите пользовательский интерфейс в пользователе, так называемая «оконная станция».

person rezdm    schedule 21.04.2015
comment
Дело в том, что программа, которую я написал для запуска службы, работает в обоих режимах. Таким образом, если пользователь вошел в систему, он сможет увидеть окно, в противном случае программа запустится и закроется сама по себе. И это был рабочий сценарий для других экземпляров моей программы, которые я установил на других машинах. Я собираюсь взглянуть на журнал событий Windows, как вы говорите. Надеюсь, я смогу найти что-нибудь, объясняющее, почему программа не запускается. - person disasterkid; 21.04.2015
comment
Что, если есть два пользователя — один использует физический терминал (клавиатуру, монитор), а другой заходит через клиент служб терминалов? Что делать, если ваша программа для запуска в безголовой установке Windows (честно). Я бы настоятельно рекомендовал, если есть реальная необходимость запустить программу пользовательского интерфейса из службы, проверить, как запустить пользовательский интерфейс в конкретных Window Station - person rezdm; 21.04.2015
comment
Я проверяю сейчас и не нахожу в журнале событий ничего, связанного с моей программой. нет сообщений о сбоях. что делает это очень странным для меня, так это то, что, глядя на код, который я написал выше. служба работает, потому что всегда пишется первое сообщение журнала (о запуске файла...). Чего я не понимаю, так это того, что даже если мой Process.Start() не работает должным образом или даже если он просто молча проходит мимо, почему я не получаю никаких других журналов. Ни (Файл запущен!), ни (Ошибка.) - person disasterkid; 22.04.2015
comment
Сейчас попробую Process Monitor. - person disasterkid; 22.04.2015
comment
Я установил Process Monitor и зарегистрировал все, что касается этого целевого файла .exe, который должен был запускаться моей службой в назначенное время. Имя исполняемого файла FileCampaignRunner. Вот куда я его загрузил: docs.google. com/spreadsheets/d/ посмотрите, не найдете ли вы что-нибудь подозрительное. Я вижу некоторые ошибки SHARING VIOLATION. Как вы думаете, это то, что блокирует файл? - person disasterkid; 22.04.2015
comment
Я бы предложил следующее чтение: msdn.microsoft.com/en-us/library/windows/desktop/ blogs.technet.com/b/askperf/archive/2007/07/24/ blogs.technet .com/b/voy/archive/2007/02/23/ Опять же, сервисы созданы для работы без взаимодействия с пользователем. Windows 2012 (вероятно) имеет еще более строгие ограничения, и я настоятельно рекомендую создавать приложения, независимые от пользовательского пространства. Они (сервис и приложение пользовательского интерфейса) могут одновременно использовать один и тот же код. - person rezdm; 22.04.2015
comment
Я прочитал эту ссылку и установил значение 0. Комментарий @Matthew Watson предлагает то же самое. Но все еще не работает. - person disasterkid; 22.04.2015

Windows Server 2012 блокирует все файлы, скопированные из других мест. Так я разблокировал все файлы программы. Спасибо за вашу помощь.

person disasterkid    schedule 22.04.2015
comment
Как вы разблокировали файлы? Спасибо. - person Bruno Ferreira; 06.04.2017