我有以下代码:
// 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 :(得分:0)
尝试使用
procStartInfo.UseShellExecute = true;
您没有指定,在哪里可以找到“w32tm”,因此可能无法找到该文件。我认为你必须提供它的完整路径和扩展,否则使用UseShellExecute。
顺便说一句:某些属性在代码中设置了两次。 ; - )
答案 1 :(得分:0)
使用DependencyWalker
工具找出哪些模块丢失,并且无法在搜索路径中找到。将UseShellExecute
设置为true可能会有所帮助。你将它设置为假的原因是什么?