TPL无法启动进程

时间:2012-04-17 11:38:23

标签: c# process cmd task-parallel-library

以下代码出了什么问题?我喜欢在comprssion完成后启动一个进程并更新UI。

错误是指定的可执行文件不是此OS平台的有效应用程序。

    string sArgs = "a all.zip a.txt b.txt c.txt";
    ProcessStartInfo psi = new ProcessStartInfo("7z.exe", sArgs);
    psi.UseShellExecute = false;
    psi.CreateNoWindow = false;
    psi.LoadUserProfile = false;
    Process proc = new Process();

    Task t1 = new Task(() =>
        {
            proc = Process.Start(psi);
        }
    );

    button13.Enabled = false;
    Task t2 = t1.ContinueWith((antecedent) =>
        {
            button13.Enabled = true;
        }, TaskScheduler.FromCurrentSynchronizationContext()
    );

    t1.Start();

3 个答案:

答案 0 :(得分:1)

  • 你在Windows上运行吗?
  • 系统7z.exe中有PATH吗?
  • 7z.exe文件是否为64位,而您的操作系统是32位?

答案 1 :(得分:1)

只需注意:此代码将立即启用button13,因为您的主要任务不会等待进程退出。这段代码可以解决问题:

string sArgs = "a all.zip a.txt b.txt c.txt";
ProcessStartInfo psi = new ProcessStartInfo("7z.exe", sArgs);
psi.UseShellExecute = false;
psi.CreateNoWindow = false;
psi.LoadUserProfile = false;
Process proc = new Process();

Task t1 = new Task(() =>
    {
        proc = Process.Start(psi);
        proc.WaitForExit();
    }
);

button13.Enabled = false;
Task t2 = t1.ContinueWith((antecedent) =>
    {
        button13.Enabled = true;
    }, TaskScheduler.FromCurrentSynchronizationContext()
);

t1.Start();

答案 2 :(得分:0)

你的路径是7z吗?您可以通过psi的EnvironmentVariables属性设置它