5

ユーザーごとに管理者権限を持つユーザー(「Justme」otpion)によってインストールされたvisioプラグイン(たとえば、バージョン1)があり、msiインストーラーはVisualStudioのセットアップと展開を使用して作成されました。その後、組織のポリシーにより、すべてのユーザーの管理者権限が取り消されました。したがって、プラグインをそのマシンのすべてのユーザーが利用できるようにし、インストールされている古いバージョン(バージョン1)をアンインストールするには、IT管理者がマシンごと(すべてのオプション)として新しいバージョン(バージョン2)をインストールする必要があります。権限が取り消されたユーザーによる。

手動による介入を回避するために、アンインストールを自動化しようとしています。このユーティリティは、アプリケーションのインストールされているすべてのインスタンスを検出することで機能します。そのマシンにレジストリキーを確認し、msiexecで強制的にアンインストールします。しかし、msiexecは、出口コードが1605である他のユーザーによってインストールされたバージョンのアンインストールに失敗します-このアクションは、現在インストールされている製品に対してのみ有効です。

ユーザー(バージョン1プラグインをインストールしたユーザー)にアプリケーションをアンインストールする管理者権限が与えられている場合、ユーザーはアプリケーションを手動でアンインストールできます。これにより、アプリケーションが改ざんされておらず、問題なくアンインストールできる状態になっていることが証明されます。

「Justme」オプションを使用して他のユーザーによってインストールされたマシンにインストールされたアプリケーションをプログラムでアンインストールする方法に関するポインタは、本当に役立ちます

4

3 に答える 3

3

これは、VisualStudioの問題だけではありません。Windowsインストーラーでは、アップグレード中にインストールコンテキスト(ユーザー/マシン)を変更することはできません。新しいマシンごとのインストールをインストールする前に、インストールを実行したユーザープロファイルとしてログオンを実行し、それらを削除する必要があります。

于 2012-08-25T18:38:40.540 に答える
3

私はいくつかのさらなるドキュメントを見つけました:

Installshieldを使用している場合は、次のアプローチを使用して、既存のユーザーごとのインストールを削除し、マシンごとに新しいパッケージをインストールできます。Installshieldを使用しない場合は、「ISSetAllUsers」の代わりのCAでも同じことが可能です。以下は、「メジャーアップグレード」の適切に設定されたアップグレードテーブルを想定しています。メジャーアップグレードに関する情報を検索してください。

  1. FindRelatedProductsの前にInstallshieldISSetAllUsersカスタムアクションを挿入します。このアクションは、既存のインストールのALLUSERSの値を読み取り、新しいセットアップにそれを適用します。このアクションを追加する方法については、以下を参照してください。
  2. InstallInitializeの前に、シーケンスの早い段階でRemoveExistingProductsを移動します。
  3. RemoveExistingProductsの直後に、 setプロパティCAを使用してALLUSERSを1に戻します。
  4. InstallInitializeの前に、上記の両方の操作を実行することが非常に重要です。InstallInitializeの後にALLUSERSの値が変更されると、インストール後にすべてのコンポーネントが認識されない状態になり、通常、自己修復が発生します。

ISSetAllUsersカスタムアクションを挿入するには、次のようにする必要があります。

  1. Installshieldで、[ツール]->[オプション]->[一般]->[ISSetAllUsersアクションを自動的に作成する]を有効にします。[OK]をクリックします。
  2. アップグレードビューに移動し、ダミーエントリを挿入します。
  3. ダイレクトエディタに移動し、アップグレードテーブルからダミーエントリを削除します。
  4. ISSetAllUsersアクションが挿入されている必要があります。InstallExecuteSequenceビューに移動し、FindRelatedProductsの前にアクションを移動します。

重要:ユーザーごとからマシンごとの移行を実行する必要がない限り、ISSetAllUsersカスタムアクションをプロジェクトに追加しないでください。このアクションにより、set propertyカスタムアクションを使用してマシンごとのインストールを強制しない限り、新しいセットアップが古いセットアップと同じ値でインストールされることが効果的に保証されます(上記のシナリオで行うように)。

于 2012-09-06T01:26:56.923 に答える
1

私はこの数年前にパッケージを作成しましたが、私の人生ではそれを見つけることができません(上記の回答を参照)。メジャーアップグレードアップグレードテーブルを使用して適切なユーザーのコンテキストでユーザーごとのインストールをアンインストールし、次にプロパティの設定カスタムアクションを使用して、新しいインストールがInstallInitializeに到達し、マシンごとの新規インストール。つまり、 InstallExecuteSequenceのできるだけ早い段階でRemoveExistingProductを移動し、その直後にsetプロパティを実行する必要があります。

クレイジーに聞こえますが、私が覚えている限り、それはいくつかの深刻なテストとデバッグの後に機能しました。重要な部分は、ユーザーごとのインストールを最初にインストールしたユーザーとして新しいインストーラーを実行することです。sccmは別のコンテキストでインストールを実行する可能性があるため、これをロジスティック的に実行するのは必ずしも簡単ではありません。また、シーケンスのさらに早い段階でRemoveExistingProductsを移動し、それを機能させるためにいくつかの標準アクションをその背後に移動する必要がある場合もあります。正確には思い出せません-ごめんなさい。ActiveSetupを使用して、「ユーザーごとに1回」実行するようにインストールをスケジュールできます。次に、インストールが存在しない場合にすべてのユーザーにエラーメッセージが表示されないように、セットアップGUIを抑制する必要がある場合があります。

上記はOrcaでは難しいことに注意してください。WiseforWindowsインストーラーまたはInstallshieldで試してください。Installshieldパッケージには、ALLUSERSの値を再ヤンクする独自の方法もあり、機能させるには、バリアントを無効にする必要がある場合があることに注意してください。簡単なことではないはずです:-)。

于 2012-08-29T13:28:22.243 に答える