0

シンプルな Windows アプリケーションとそのインストーラーを作成しました ( Setup project)。

インストール後にアプリケーションを自動起動したいので、このスクリプトをInstaller.csに追加しました

public override void Commit(System.Collections.IDictionary savedState)
{
    string appPath = Context.Parameters["AssemblyPath"].ToString();
    System.Threading.Thread.Sleep(500);
    System.Diagnostics.Process.Start(appPath, "2");
}

アプリケーションの起動は完璧ですが、SYSTEM user.

ここに画像の説明を入力

Default userMSIを開くアプリケーションで自動起動アプリケーションを実行したい。

4

3 に答える 3

2

インストール後にアプリケーションを起動する方法を尋ねる以前の質問がありました。残念ながら、承認済みの回答としてマークされている回答は、既にお持ちのものと本質的に同じコードプロジェクトの記事にリンクしています。お気づきのように、間違ったアカウントでアプリケーションを実行する可能性があるという欠点があります。

Peter Kelly の回答は、Aaron Stebner のブログの投稿へのリンクです。これには、これを行うためのより正しい方法が詳しく説明されています。インストールの完了に実行可能ファイルを起動するには、Install Execute シーケンスにアクションを追加する必要があります。彼は、既にビルドされた msi ファイルに必要な変更を実行するためのスクリプトを含めています。

他のインストーラー テクノロジ ( Wix、Installshield など) では、インストーラー プロジェクト内でこれを直接構成する方法がある場合があります。Visual Studio セットアップ プロジェクトでそれを行う方法はありません (Aaron のビルド後の手順を使用する以外に)。VSセットアッププロジェクトを避けることを好むもう1つのこと。

于 2012-05-22T10:10:23.240 に答える
1
  • コメントから、最初に昇格し、インストールが昇格して実行されるブートストラッパーがあると確信しています。最後にアプリケーションを起動すると、実行コンテキストが継承されます。
  • もう 1 つの可能性は、即時カスタム アクションではなく遅延カスタム アクションでアプリケーションを起動することです。即時カスタム アクションは常に現在のユーザーのコンテキストで実行されますが、遅延アクションは通常システム コンテキストで実行されます。これは、即時カスタム アクションとは対照的に、システムに変更を加えることが想定されているためです。

詳細がなければ、アプリケーションがシステム コンテキストで起動する理由を説明するのは困難です。

つまり、インストールの開始時に現在のユーザーのコンテキストを保存し、インストール自体をシステム コンテキストで実行し、インストールが完了したら、元のユーザーのコンテキストでアプリケーションを開始する必要があります。

このアプローチの詳細については、UAC 管理者レベル プロセスから権限を下げてプロセスを開始する を参照してください。

于 2012-05-22T07:39:49.600 に答える
0

この投稿から解決策を得ました

Windows サービスを開始し、cmd を起動します

これはSYSTEMユーザーの問題を解決します

于 2012-05-25T11:32:07.307 に答える