InstallAllUsers == trueでインストーラから呼び出されると、Process.Start(someUri)が失敗する

カスタムインストーラークラスを使用するWindowsインストーラーセットアッププロジェクトを作成し、カスタムインストーラークラス内のどこにでも Process.Start(someUri); を配置すると、セットアップが完了するとProcess.Start()プロジェクトプロパティ InstallAllUsers がtrueに設定されています。 InstallAllUsersをfalseに設定すると、Process.Start()は期待どおりに機能します。 Start()が失敗すると、例外はスローされず、Start()の呼び出しに続くコードはまだ実行されますが、指定したuriは開かれません。

私はこれについての説明を見つけるのは大したことはない。誰がこのようなことが起こるのかについて何か光を当てることはできますかありがとう!

Edit: I'm growing suspicious this is a Chrome-specific anomaly. Process.Start() works as expected with IE. Since InstallAllUsers implies a machine level installation, I'm now wondering if the fact that Chrome is installed to a user-specific AppData directory is part (or all) of the problem.

0
Awww ....私の非常に最初のtumbleweedバッジ!今夜は日記に載っています....;)
追加された 著者 Nick Spreitzer,

1 答え

http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k(SYSTEM.DIAGNOSTICS.PROCESS);k(PROCESS);k(TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22);k(DevLang-CSHARP)&rd=true

問題が見つかりました。 helpのProcessクラスの例には、次のコメントがあります。

// url's are not considered documents. They can only be opened

// by passing them as arguments.

つまり、「デフォルトブラウザ」を使用しようとすると問題が発生します。アプリケーション(IExplorer.exe)をURLに指定する必要がある

1
追加された
InstallAllUsersプロパティがtrueに設定されているインストーラクラスにのみ問題が存在する理由がわかりません...プログラムの通常の操作中(例えば、インストール/アンインストールしないなど)には、Process.Start( "url")は期待通りに機能します。
追加された 著者 Nick Spreitzer,
実際には、falseではなくnullを返します。
追加された 著者 Nick Spreitzer,
あなたがProcess.Start()の戻り値をチェックすると、Webページではfalseになります。呼び出し元のコードが戻り値をチェックしていて、何が実行されているのかをチェックしていない場合、不正に分岐する可能性があります。
追加された 著者 Dan Ricker,