2012-08-14 23 views
0

我正在嘗試創建一個應該啓動進程的Windows服務。此過程需要登錄到另一個帳戶。Windows服務w/process.start用戶名,密碼和域

protected override void OnStart(string[] args) 
     { 
      _thread.Start(); 
     } 

    private void ThreadFunction() 
    { 
     var process = new Process 
          { 
            StartInfo = 
             { 
              UserName = "User", 
              Password = "Pass", 
              UseShellExecute = false, 
              FileName = @"C:\Program Files\Default Company Name\ServiceProcessInstaller\ConsoleProcess.exe" 
             } 
           }; 
     process.Start(); 
    } 

我認爲這很簡單,但它似乎像process.start和Windows服務就像油和水。

當我開始這個過程時,什麼都沒有發生,最終發生了一個異常: Windows無法在本地計算機上啓動「AServiceProcess」服務。 錯誤1067:進程意外終止。

我真的很感謝所有的幫助,我可以得到,如果有什麼不清楚讓我知道。

+0

你絕對應該嘗試捕捉和記錄問題的地方。 – 2012-08-14 10:27:30

+0

可能的重複http://stackoverflow.com/questions/1454502/how-can-i-restart-a-windows-service-programatically-in-net – 2012-08-14 10:44:57

+0

記錄異常之後: System.ComponentModel.Win32Exception(0x80004005) :訪問被拒絕 at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo) at System.Diagnostics.Process.Start() at ServiceProcess.Service1.ThreadFunction() – MMessell 2012-08-14 11:29:27

回答

0

我最終通過使用函數'CreateUserAsProcess',與WinNT50和新的憑據設置來解決問題。

0

我建議你退後一步並查看一些關於Windows服務進程的概念信息。服務只是一個在任何登錄用戶之外啓動和運行的進程,與Unix守護進程在概念上運行的方式大致相同。你說你的代碼代表你想用來啓動另一個進程的服務,但是上面顯示的啓動方法正在啓動一個叫做「ServiceProcess.exe」的東西,這看起來很混亂 - 好像那就是你想要的真實服務跑。

服務進程需要一組憑據,並且提供(或隱式使用)的憑據(基於您的信息)不具有啓動外部進程所需的權限。

除非在這裏有非常不尋常的要求,否則我會建議您考慮 - 如果可能的話 - 在服務流程本身實施您需要的操作。你很可能能夠使上述結構工作,但我不確定你會發現它長期維持。

+0

您提出了一個有效的觀點。我最初的問題是我需要登錄到一個帳戶,因爲這個帳戶可以訪問網絡驅動器。我很確定SYSTEM帳戶將無法訪問此帳戶。 可以通過登錄服務解決這個問題嗎? – MMessell 2012-08-15 08:50:31

+0

您可以配置Windows服務以使用您想要的任何憑據(並且您擁有密碼:))。您說對機器本地的SYSTEM帳戶將無法訪問網絡,這是正確的。您使用的帳戶憑證需要具有「作爲服務登錄」權限。 – 2012-08-15 10:46:55

相關問題