Я запускаю процесс изнутри службы Windows, используя
ProcessStartInfo processStartInfo = new ....
Process.Start(processStartInfo);
Проблема в том, что если я запускаю службу под учетной записью локальной системы, она работает нормально, но не показывает программы 'окно.Я пытался поместить учетные данные пользователя в свойствах службы, но затем флажок «Разрешить службе взаимодействовать с рабочим столом» отключается.
Мне действительно нужно запустить приложение, вызывающее его из службы, и мне действительно нужно увидетьокно приложения.
Помогите мне, пожалуйста.
UPD.Что ж, вы используете перегруженную версию Process.Start, которая принимает имя пользователя, пароль и домен - она вытащит программу на рабочий стол.Но теперь оно запускает приложение под одной учетной записью, но показывает это на рабочем столе другого пользователя.Как получилось?
UPD2: У меня есть идея!Я могу использовать psexec.exe из Sysinternals Suite.Но проблема в том, что мне нужно начинать эту вещь молча "как администратор".И я не знаю как.Я имею в виду, даже если у вас уже есть права администратора, иногда вы должны вручную сказать «запустить от имени администратора», подтвердить UAC и только после этого вы готовы к работе.Я не знаю, как тихо запустить что-то, не принося UAC вещь ....
UPD3: Дорогой Господь.У меня есть эта вещь!Наконец.
Хорошо.В начале проблема действительно была в сеансе 0, что-то изолированное.Поэтому мне нужно было создать промежуточное приложение, которое можно запустить из службы, а затем это приложение, в свою очередь, предполагает запустить мое приложение через RPC и перенести его на рабочий стол.Вместо создания приложения среднего уровня я решил использовать инструмент psexec (в любом случае он работает именно так, как мне нужно - через RPC).И когда я пытался использовать этот инструмент под учетной записью LOCAL SYSTEM, он почему-то не работал.И тогда я понял - причина в том, что это чертовски всплывающее диалоговое окно EULA, которое MS помещает в каждый отдельный pstool, и было невозможно нажать кнопку, чтобы подтвердить диалог под учетной записью локальной системы.Поэтому решение состоит в том, чтобы создать ключ в реестре HKU.DEFAULT \ Software \ Sysinternals \ PsExec со значением DWORD EulaAccepted = 1
Ура, теперь это работает!НО!Теперь мне нужно вывести программу на экран текущего зарегистрированного пользователя.Для этого мне понадобится идентификатор сессии!
Итак, вопрос: как получить идентификатор сеанса текущего зарегистрированного пользователя?А что будет, если еще никто не вошел?Какой идентификатор сессии это будет?
UPD4: Вот и все!Я получил это!
[DllImport ("Kernel32.dll", EntryPoint = "WTSGetActiveConsoleSessionId")] public static extern int WTSGetActiveConsoleSessionId ();
Спасибо, ребята!