System.Diagnostics.Process.Start()
に問題があります。Process.Start()を使用して起動するとインストーラが失敗しますが、ダブルクリックすると動作します
サードパーティのインストーラ(実行可能ファイルにラップされたMSIパッケージ)を起動するときに、exeファイルをダブルクリックするか、コマンドラインから起動しても問題なくインストールされます。
ただし、アプリケーション内からを使用して起動すると、エラーコード5 =アクセス拒否でインストーラが失敗します。ログには、一部のレジストリ設定を復元できないため、失敗したというメッセージが表示されます。
exeをダブルクリックしてアプリケーション内からプロセスを起動するまでの違い(セキュリティ上の問題)を知っている人はいますか?ユーザーは管理者として実行されます。
例コード:
var info = new ProcessStartInfo();
info.FileName = @"C:\MyFolder\setup.exe";
info.UseShellExecute = false; // I have tried both true and false here
Process p = Process.Start(info);
p.WaitForExit();
if (p.ExitCode != 0)
{
// Do something...
}
がUPDATE:
私は小さなコンソールアプリケーションで上記のコードを入れて、それが働きました。明らかに主なアプリで何か怪しげなことが起こっていた...
私はいくつかのレジストリキーを閉じるのを忘れてしまった。インストーラは同じキーにアクセスしようとして失敗しました。キーを正しく閉じると、コードが機能しました。
大変申し訳ございません。私には恥ずべき。
@Kipotlov - 質問はwindows-xpタグが付けられています。 – Oded
通常の実行で特定の操作を可能にするためにユーザーの操作が必要な場合は、インストーラを通じてコマンドライン引数をMSIに渡す必要があります。このProcessオブジェクトを設定して呼び出す方法の例が役に立ちます。 – BrMcMullin