我编写了 C# 控制台应用程序,该应用程序有时会尝试使用 7zip(特别是 7za.exe)解压缩文件。当我手动运行它时,一切运行正常,但如果我在任务计划程序中设置一个任务并让它运行,它会抛出此异常:
System.ComponentModel.Win32Exception (0x80004005): The system cannot find the file specified
at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start()
at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
这是我的代码:
ProcessStartInfo p = new ProcessStartInfo();
p.FileName = "7za.exe"; //http://www.dotnetperls.com/7-zip-examples
p.Arguments = "x " + zipPath + " -y -o" + unzippedPath;
p.WindowStyle = ProcessWindowStyle.Hidden;
Process x = Process.Start(p);
x.WaitForExit();
7za.exe 是我的项目的一部分,Copy to Output Directory = Copy Always
。该任务是使用我的帐户设置的,并且我已核对Run with Highest Privileges
.
看起来您依赖的工作目录是包含可执行文件的目录。但事实并非一定如此。代替
p.FileName = "7za.exe";
指定 7za 可执行文件的完整路径。通过动态检索运行时保存可执行文件的目录来构造此路径。例如通过使用Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
.
所以你的代码可能会变成
p.FileName = Path.Combine(
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
"7za.exe"
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)