MSIインストーラーを使用してWindowsフォームアプリケーション(C#、NET 3.5)をインストールしています。このアプリケーションには、押すと特定のURLでブラウザを開くボタンがあります。私が使う
Process.Start(url);
ブラウザを開きます。これはデバッグ時には問題なく機能しますが、インストール後は最適な結果が得られません。例えば。
- Just Meオプションを選択してインストールすると、現在の設定でデフォルトのブラウザ(FF)が開きます。
- [Everyone]オプションを指定してインストールした場合、ボタンを押すと、最近の設定(プロキシ、表示されたツールバーなど)がないバージョンのIEが開きます。
私の知る限り、この問題はインストール時にアプリケーションに関連付けられたユーザーが原因で発生します。
ユーザーがプロキシと個人用ブラウザの設定を必要とする可能性があること、およびJust Meを考慮に入れると、Everyoneの選択はユーザー次第である必要があります。アクションのベストコースは何ですか?
現在ログインしているユーザーでProcess.Start(url)を呼び出してみました
ProcessStartInfo.UserName = Environment.UserName
ただし、パスワードも必要であり、資格情報を要求することはできません。
他に何か提案はありますか、Process.Start()を誤って使用していますか、インストール中に行う必要のある設定はありますか、見逃したものはありますか?
更新: data_smithが提案したようにProcess Explorerを使用すると、次のことに気づきました。
- Everyone用のアプリケーションをインストールすると、NT AUTHORITY \ SYSTEMユーザーの下で起動するため、未構成のブラウザーになります。
- Just Meを選択してアプリケーションをインストールすると、現在のユーザーの下で起動します
クレデンシャルを要求せずに、すべてのユーザーにインストールされている場合でも、現在のユーザーの下で(Windowsの起動時に)アプリケーションを起動する方法はありますか?
更新: ShellExecuteを使用するためのdata_smithによる提案と、こことここでの提案に従って、問題を解決し、目的の動作を得ることができました。
主な問題は、インストーラーが終了すると、アプリケーションがProcess.Start()で開始されることでした。これにより、NT AUTHORITY \ SYSTEMユーザー(インストーラーが実行されるユーザー)としてアプリケーションが開始されたため、このアプリケーションによって開かれるすべてのブラウザーもSYSTEMユーザーの下にあります。data_smithからの提案と上記のリンクされた提案を使用することで、現在のユーザーの下でプロセスを開始することができました。
コンピュータが再起動された後、これはレジストリエントリを介して構成されているため、アプリケーションは正しいユーザーの下で起動します。