Почему мое приложение не отображается при запуске моей службой - PullRequest
0 голосов
/ 15 мая 2009
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

const int SW_SHOW =5;

string Tartgetfile = @"C:\BringLog.exe";
p.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
p.StartInfo.CreateNoWindow = false;
p.StartInfo.FileName = Tartgetfile;
try
 {
  if (p.Start() == true)
   {
     ShowWindow(p.Handle, SW_SHOW);
     WriteToLog("PROCESS STARTED");
   }
  else
   {
    WriteToLog("FAILED TO START PROCESS");
   }
 }
catch (Exception ex)
 {
  WriteToLog("FAILED TO START PROCESS" + ex.Message+ ex.Source);
 }                     

Я использовал этот код в моем событии onsessionchange службы, служба запускает мое приложение при событии входа в систему, но приложение скрыто, но работает. я не мог видеть

1 Ответ

1 голос
/ 15 мая 2009

По умолчанию сервисы не имеют доступа ни к какому сеансу - ни к сеансу входа в систему, ни к безопасному UAC в Vista, ни даже к обычным сеансам пользователя. Следовательно, им негде показать свои окна. Это хорошо. Вокруг него есть хаки, но правильным способом, вероятно, является создание процесса в Windows Station "Winsta0". Установите STARTUPINFO.lpDesktop ="winsta0\default"; при звонке CreateProcess( )

...