2

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... 
        }
    }
4

3 に答える 3

3

これは、カスタム アクションを遅延として実行しているために発生する可能性があります。つまり、デフォルトで SYSTEM ユーザー アカウントで実行されます。

解決策は、すぐに起動することです。たとえば、インストールの最後のダイアログの [完了] ボタンで発行されたイベントを使用して起動できます。公開されたイベントを VS セットアップ プロジェクトに追加する方法、または可能かどうかは正確にはわかりませんが、専用のセットアップ オーサリング ツールでビルドされたパッケージに簡単に追加できます。

于 2012-12-04T07:29:22.993 に答える
-1

個人的にはexplorer.exe、アプリの実行可能ファイルへのパスをパラメーター化して実行することで、これを解決できました。

Process.Start(
    new ProcessStartInfo
    {
        FileName = "explorer.exe",
        Arguments = Context.Parameters["target"],
        UseShellExecute = true
    });
于 2016-06-19T22:44:22.410 に答える