2011-06-25 233 views
2

我想通過service.i運行在c#winform中創建的應用程序,但是應用程序並未開始運行,即使服務已成功啓動,也沒有引發異常。用服務啓動應用程序

protected override void OnStart(string[] args) 
     { 
      eventLog1.WriteEntry("starting Kb"); 
      try 
      { 
       Process myProcess = new Process(); 
       myProcess.StartInfo.FileName = @"C:\Program Files (x86)\Invisual E. Inc\KeyboardSetup\keyboard.exe";//Exe Path 
       myProcess.StartInfo.CreateNoWindow = false; 
       myProcess.EnableRaisingEvents = true; 

       myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal; 


       myProcess.Start(); 
       ProcessWindowStyle ws = myProcess.StartInfo.WindowStyle; 
       if (ws == ProcessWindowStyle.Hidden) 
        myProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal; 

       eventLog1.WriteEntry("started"); 

      } 
      catch (Exception c) 
      { 
       eventLog1.WriteEntry(c.Message); 
      } 
     } 

日誌文件不顯示任何異常。

目的是在窗口的歡迎屏幕上啓動應用程序,以便用戶可以使用自定義鍵盤。

回答

2

什麼操作系統?從Vista和更高版本,你不能從服務創建圖形用戶界面(這是一個安全漏洞和醜陋的...)有一個用戶0會話,顯示從Vista開始服務的GUI。

爲什麼不爲應用程序創建註冊表項和/或啓動項,以便在安裝應用程序的用戶登錄時啓動?或者按照info here關於實施交互式服務。

+0

我需要此應用程序運行在登錄screen.when用戶尚未登錄 –

+0

是否用於身份驗證過程?否則,出於安全原因,在用戶登錄之前,可以從Windows機器運行NO gui。如果您嘗試創建「應用程序框」,則實際上需要自動登錄用戶以獲取操作系統。 – Spence

+0

如果是用於身份驗證,那麼您需要創建一個GINA dll。但我的理解是C/C++需要正確執行此操作。 – Spence

0

服務通常在登錄用戶以外的用戶下運行,因此該服務沒有可用於顯示任何窗體的桌面,因此原因t沒有被顯示。

我想你會需要找到另一種方式,雖然一個WinForms應用程序可以啓動一項服務我不相信它可以通過其他方式來完成。

問候

AJ

相關問題