我有包含此代碼窗口服務:即使進程存在,Process.WaitForExit爲什麼會拋出「無進程」異常?
public static void ExtractTextInner(string source, string destination)
{
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = EXTRACTOR_EXE_FILEPATH
startInfo.Arguments = "\"" + source + "\" \"" + destination + "\"";
startInfo.CreateNoWindow = true;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
Process process = new Process();
process.StartInfo = startInfo;
process.Start();
process.WaitForExit();
int exitCode = process.ExitCode;
process.Close();
if (exitCode != 0)
{
switch (exitCode)
{
case 1:
throw new ApplicationException("IFilter Extraction Failed");
default:
throw new ApplicationException("Unknown Exit Code:" + exitCode.ToString());
}
}
}
這段代碼的目的是運行在一個文檔中,我們使用一個單獨的過程,因爲一些IFilter的是出了名的片狀的IFilter提取物。
現在,此代碼在Windows 7和Server 2008 R2盒子上運行得非常好,但在Windows Server 2003上,WaitForExit
立即拋出「沒有與此Process對象關聯的進程」異常。這個過程確實存在並且完成了它的任務,沒有任何問題。
任何人看到這?任何人都可以闡明爲什麼WaitForExit會拋出這個錯誤?
附加信息
如果我把在一個控制檯應用程序代碼並運行它正常工作的WINDWS Server 2003的箱爲好,因此它似乎是在一個服務運行此特定問題一個Windows Server 2003框。
這很難用這段代碼解釋。修補程序與服務設置。確保「與桌面交互」選項已關閉。在應用程序事件日誌中發佈任何內容。 – 2012-02-02 11:49:59
當你沒有得到處理過程的句柄(因此不能等待它)時會發生錯誤。確保您指定UseShellExecute = false,以防止重用流程。你也可以描述服務與可執行文件的比特率是32還是64?最後嘗試Process Monitor並查看它顯示的內容。 – Ben 2012-02-02 12:51:57
@Hans:什麼都沒有出現任何事件日誌(至少沒有我的代碼不是故意放在那裏的)。我不確定在哪裏可以找到「與桌面交互」選項「 – AnthonyWJones 2012-02-02 12:51:57