1

C#コードからインストールプログラムを実行すると、.exeファイルを正常にインストールし、exeファイルとmsiファイルの両方をアンインストールできます...しかし、インストールのためにmsiを起動するたびに、そこに座って何もしません....

start = new ProcessStartInfo("msiexec.exe", "/i \"" + tempDir + "/" + s.executable + "\"");
start.WindowStyle = ProcessWindowStyle.Hidden;
start.CreateNoWindow = true;
Process.Start(start).WaitForExit();

誰でも私の間違いを見つけることができます。終了の待機が無期限に待機することを理解しています.10〜12のインストールが同期的に行われるため、それは問題ありませんが、実際にはインストールされません.....

4

2 に答える 2

1

msiexec.exe ドキュメントを見てみました。*.msi ファイルでのみ動作するようです。あなたのコードを msi ファイルで試してみましたが、うまくいきました。

コードに小さな問題があります。ディレクトリ パスは逆にする必要があります。

start = new ProcessStartInfo("msiexec.exe", "/i \"" + tempDir + "\\" + s.executable + "\"")
于 2013-09-18T19:40:04.310 に答える
0

最適化するために、また主にサポート可能にするために、いくつかの問題についてコマンド ラインを微調整する必要があります。

  1. ここでは ProcessWindowStyle.Hidden オプションを使用しないでください。その必要はありません。をテストしている限り、「/qb」パラメーターを使用してください。リリースの場合、ダイアログが必要ない場合は、「/qn」を使用してください

/qn を使用せずにウィンドウを開くことを禁止すると、問題の原因になる可能性があると思います。

  1. プログラムが管理者権限で既に開始されていることを確認してください。そうしないと、Vista、Win7 ff でより複雑な UAC 状況が発生します。UACダイアログを許可するには、ダイアログが本当に必要です。プログラムが既に管理者権限で開始されている場合は、"/qn" を使用して、MSI の初心者に推奨するシナリオを単純化することができます。

  2. ロギングを使用します。

  3. スラッシュも機能する場合がありますが、Windows ではバックスラッシュを使用する方が安全です。=> このような結果のコマンド ラインをお勧めします。

    文字列 msicmd; msicmd="msiexec.exe /i \"" + tempDir + @"\" + msifile + @"\" /qb /L*v \"tempDir\mylogfile\"");

    // エラーが発生した場合にデバッグするために、このコマンド ラインのトレースを表示します :-)

...

于 2013-09-21T17:38:59.117 に答える