C# アプリをインストールする Visual Studio インストーラー プロジェクトがあり、インストールの完了後にプロセスを実行するためのカスタム アクションとコードがあります。
Windows マシンにログインしているユーザーが「john」であるとします。john が msi インストーラーを実行すると、タスクマネージャーでプロセスを確認すると、msiexec.exe がインストーラーのプロセス名であり、ユーザー「john」として実行されていることが示されます。
インストーラーが完了し、インストール アプリのプロセス myapp.exe を実行します。Windows のタスク マネージャーでこのプロセスを確認すると、myapp.exe が SYSTEM として実行されていることがわかります (どのアカウントが john として実行されていないのかはわかっています)。
問題 myapp.exe が SYSTEM ユーザーとして実行されている場合、ユーザー john として既に実行されているコンポーネント (私の場合は iTunes) の com コンポーネント インスタンスを作成できません。コンポーネントが実行されていない場合、iTunes のインスタンスの作成は成功しますが、それ以外の場合は失敗します。
質問 では、インストーラーが john として実行されていることを確認することは可能ですか? それが終了すると、プロセス myapp.exe が SYSTEM ユーザーとしてではなく john として開始されますか? インストーラー中にユーザーにパスワードを要求しないことに注意してください。
インストーラーの完了時に実行するコード
// Event handler for 'Committed' event.
private void MyInstaller_Committed(object sender, InstallEventArgs e)
{
try
{
Directory.SetCurrentDirectory(Path.GetDirectoryName
(Assembly.GetExecutingAssembly().Location));
Process.Start(Path.GetDirectoryName(
Assembly.GetExecutingAssembly().Location) + "\\MyApp.exe");
}
catch
{
// Do nothing...
}
}