2

複数のユーザーがシステムにログインしている場合、通常どおりアプリケーションをアンインストールすると、メッセージ ボックスが表示されます。

ここに画像の説明を入力

ユーザーが [続行] をクリックすると、アンインストールが行われますが、エラーが発生する可能性があります。複数のユーザーがログインしている場合にインストールプロセスを終了したいプロジェクトインストーラーがあります。そのため、Before_UnInstall イベントにこの条件を書きました。

if(Process.GetProcessesByName("explorer").Count()==1)
{
        //do uinstall
}

else
{
       //do not do unistall
}

私の質問は、else の部分でアンインストール イベントが発生しないようにするにはどうすればよいかということでした。

変更の可能性

アレクセイの答えに基づいて、プロセスの個別の所有者を確認すると思いました。ここからWMIを使用してプロセスの所有者を見つける方法を見つけました

4

1 に答える 1

2

自分で行うべきではありません。Windowsインストーラーは、他のプロセスによってロックされたファイルを処理します。さらに、ユーザーが複数のエクスプローラープロセスを持つことは正当であるため、そのような場合、コードはアンインストールを拒否しますが、ログオンしているユーザーは1人だけです。そして、このコードを昇格して実行しない限り、他のユーザーからのプロセスを検出できるとは思えません。

本当に確認したいのは、アンインストールしたアプリケーションが任意のユーザーアカウントで実行されているかどうかです。コンピュータの他のユーザーがアプリケーションを実行していない場合は、通常、続行しても安全です。

于 2011-11-26T20:02:44.237 に答える