2012-04-17 6 views
0

次のコードで何が問題になりましたか?私はプロセスを開始し、コンパイルが完了したらUIを更新するのが好きです。TPLプロセスの開始に失敗しました

エラーは次のとおりです。指定された実行可能ファイルは、この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(); 

答えて

1
  • は、Windows上で実行していますか?
  • 7z.exePATHですか?
  • 7z.exeファイルは64ビットですが、OSは32ビットですか?
+0

ここでは32と64ビットの違いは何ですか? – Bond

+0

@Bondでは、32ビットOS上で64ビットアプリケーションを実行することはできません。 – svick

+0

よろしくお願いします。すでにインストールされている場合、7Zipは正しいバージョンになると思います。 – Bond

0

あなたのパスに7zですか?あなたのpsiのEnvironmentVariablesプロパティで設定することができます

1

ちょうど注意:このコードは、メインタスクがプロセスを終了するのを待たずにすぐにボタン13を有効にします。このコードは、このトリックを行う必要があります:

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(); 
関連する問題