2013-02-04 84 views
0

我有以下代碼:System.Diagnostics.Process:找不到指定的模塊。 (0x8007007E)

 // Creating procesStartInfo obj 
     System.Diagnostics.ProcessStartInfo procStartInfo 
      = new System.Diagnostics.ProcessStartInfo(); 

     procStartInfo.RedirectStandardOutput = true; 
     procStartInfo.UseShellExecute = false; 

     // Do not create the black window. 
     procStartInfo.CreateNoWindow = true; 

     //Window state hidden .. so black windows will come inbetween 
     procStartInfo.WindowStyle 
      = System.Diagnostics.ProcessWindowStyle.Hidden; 

     // Creating Process obj to run the net time cmd 
     System.Diagnostics.Process p; 
     string output; 
     p = new System.Diagnostics.Process(); 

     p.StartInfo = procStartInfo; 
     p.StartInfo.FileName = "w32tm"; 
     p.StartInfo.UseShellExecute = false; 
     p.StartInfo.RedirectStandardOutput = true; 

     p.StartInfo.Arguments = " /resync /computer:xxxxx977"; 
     p.Start(); 
     p.WaitForExit(); 

     output = p.StandardOutput.ReadLine().ToString(); 
     MessageBox.Show(output); 

當我執行這個代碼,我收到一條錯誤消息:

出現以下錯誤:指定的模塊找不到。 (0x8007007E)。

如果我遠程或本地運行命令w32tm /resync /computer:xxxxx977,它工作正常。爲什麼在使用代碼啓動進程時出現此錯誤,而不是從命令行啓動?

回答

0

嘗試使用

procStartInfo.UseShellExecute = true; 

沒有指定,在哪裏可以找到「W32TM」,所以也許該文件可能不會被發現。我認爲你必須提供它的完整路徑和擴展,否則UseShellExecute。

順便說一句:有些屬性在代碼中設置了兩次。 ;-)

+0

如果是UserShellExecute,那麼我不能重定向標準輸出。我能做些什麼? –

+0

然後嘗試指定具有擴展名的完整路徑和文件名。例如「C:\ Windows \ System32 \ W32tm.exe」 – Fischermaen

+0

這也是我試過,仍然是同樣的錯誤彈出。 –

0

使用DependencyWalker工具可以找出哪些模塊丟失並且無法在搜索路徑中找到。將UseShellExecute設置爲true可能會有所幫助。你有什麼理由將它設置爲假?

相關問題