2017-07-27 151 views
1

我在服務器上有一個WCF服務,當我從客戶端應用程序發送一個請求時,該服務將運行一個進程與網絡節點通信,這個過程對我來說至關重要服務,如果它不運行整個服務是沒用的。問題是這個過程永遠不會運行:( 我一直在閱讀大約兩天的解決方案,但他們都沒有幫助我,我給了服務管理員權限,並檢查.exe文件路徑是否正確這裏是我的代碼任何幫助將可以欣賞IIS託管的WCF服務無法啓動進程

try 
     { 
      myprocess.StartInfo.UseShellExecute = false; 
      myprocess.StartInfo.CreateNoWindow = true; 
      myprocess.StartInfo.WindowStyle = ProcessWindowStyle.Normal; 
      myprocess.StartInfo.RedirectStandardOutput = true; 
      myprocess.StartInfo.FileName = myprocessPathAndName; 
      myprocess.StartInfo.WorkingDirectory = 
      Path.GetDirectoryName(myprocessPathAndName); 
      myprocess.StartInfo.Arguments = ConfigName; 
      myprocess.Start(); 
      Log("myprocess Runnig " , sw); 
      Log(myprocessPathAndName, sw); 
      Log(myprocess.StartInfo.WorkingDirectory, sw); 
     } 
     catch (Exception e) 
     { 
      Log("Failed to run myprocess : " + e.Message, sw); 
     } 

這裏是日誌

7/26/2017 4:05:15 AM : myprocessRunnig 
7/26/2017 4:05:15 AM : C:\inetpub\wwwroot\Station\COM\Dn\myprocess.exe 
7/26/2017 4:05:15 AM : C:\inetpub\wwwroot\Station\COM\Dn 

回答

1

第一:。

檢查myprocess.Start()方法調用的返回值如果進程已成功啓動,它會返回true。記錄返回值。

Process.Start()

二:(您可能已經這樣做了)

的處理開始時,你應該有一個等待呼籲進程運行,完整。

Process.WaitForExit()

三:

如何確定這個過程還沒有開始?你能夠檢查任務管理器中的進程嗎?該過程可能開始和失敗。有沒有由你的過程創建的日誌?你檢查過事件日誌嗎?

四:

請問您的過程中遇到任何UI組件?請注意,作爲服務運行時(在Windows Vista及更高版本中),該服務無法顯示UI。它會掛起。

第五:

您能夠使用相同的用戶ID爲您服務手動運行的過程?您可以使用RunAsPsExec在適當的用戶標識下運行您的過程。

第六:

您可以重定向標準錯誤,以及並從中讀取,看看你的過程是否已經寫任何異常

例如,

process.StartInfo.RedirectStandardError = true; 

string errResult = process.StandardError.ReadToEnd(); 

您可以登錄的結果,覈實。

第七:

你也應該記錄下你的過程

 process.WaitForExit(); 

     var exitCode = process.ExitCode; 
+0

親愛Subbu的退出代碼,實際上你的第六建議幫我找出這個問題我已經添加myprocess.StartInfo的原因.RedirectStandardOutput = true;並根據返回的值我發現有一個缺少配置文件,我的過程開始!非常感謝 – Amir