使用Process.Start()和Windows任务计划程序的异常

时间:2014-08-11 13:57:15

标签: c# scheduled-tasks console-application

我编写了C#console app,在某些时候尝试使用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

1 个答案:

答案 0 :(得分:1)

看起来您依赖的工作目录是包含可执行文件的目录。而事实并非如此。而不是

p.FileName = "7za.exe";

指定7za可执行文件的完整路径。通过动态检索在运行时保存可执行文件的目录来构造此路径。例如,使用Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)

所以你的代码可能会变成

p.FileName = Path.Combine(
    Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), 
    "7za.exe"
);