0

Setup & Deployment Project を使用して .msi インストーラーを作成する C# プログラムを Visual Studio で作成しました。「InstallAllUsers」の値は「True」に設定されているため、デフォルトで「Everyone」がインストールされますが、ユーザーはセットアップ中に「Just Me」に変更できます。

これは単なる基本的なインストーラーであり、派手なものではありません。

私の質問は次のとおりです。プログラムをインストールした後、選択したオプションを確認する方法はありますか? インストール中に「Everyone」または「Just Me」のどちらを選択したかを教えてくれる、掘り下げることができるレジストリキーはありますか? プログラムでレジストリ キーを追加しているわけではなく、プログラムの「アンインストール」キーを見つけることができますが、そこに値があるかどうかはわかりません。

* 編集 *

より鮮明な画像を得るには:

プログラムに変更を加えるたびに、バージョン番号を増やし、更新された .msi をユーザーに提供します。ユーザーはインストーラーを再実行するだけです。もともと数人のユーザーしかいないはずだったので、複雑なアップデーターは作成しませんでした。現在、多くのユーザーがおり、アップデーターは開発中です。今のところ、現在のユーザーはこのプロセスに満足しています - 私は彼らに新しい .msi を与え、彼らはそれをもう一度実行します - 1 つのことを除いて: インストーラーは最後にインストーラーを実行したときの設定を「記憶」していません (彼らの私の言葉ではありません)。「アンインストール」レジストリ値から最後のインストールのディレクトリを取得し、それを TARGETDIR で設定できるので、インストール パスがカバーされています。しかし、ユーザーが前回「Everyone」を「Just Me」に変更したかどうかを調べようとしています。

4

3 に答える 3

0

製品がインストールされたコンテキストを調べるために製品を列挙する例を次に示します。ProductCode がわかっている場合は、MsiGetProductInfo 部分を実行するだけです。

https://msdn.microsoft.com/en-us/library/windows/desktop/aa368279(v=vs.85).aspx

このための API があるため、レジストリの内容に基づいて推測するよりも推奨されます。

Visual Studio セットアップ プロジェクトのインストール フォルダー プロパティ ウィンドウには、False に設定する必要がある InstallAllUsersVisible プロパティがあります。そうしないと、RemoveExistingProducts=True を指定してアップグレードを行うと、悪夢のような状況になります。これは、元のインストールと同じコンテキストでアップグレードする必要があるためです。インストール済みの Just me 製品のすべてのユーザーでアップグレードしようとしている人を見つけることができますが、うまくいきません。

于 2016-09-03T17:11:39.087 に答える
0

アップグレード、パッチ適用などに関連するすべての問題があるため、ユーザーごとのインストールは好きではありません...したがって、Installshieldとその組み込みを使用して、メジャーアップデートのインストール中にユーザーごとのインストールをマシンごとに移行することができましたISSetAllUsersカスタム アクションと、さまざまな標準アクションの再シーケンス。説明はここにあります: windows Installer - バージョンがインストール ポリシー (ユーザーごと、マシンごと) で異なる場合、以前のバージョンをアンインストールします。

すべてのインストールをマシンごとのインストールに移行する場合は、Phils の提案を使用してこのアプローチを複製し、独自のカスタム アクションを介して現在のインストール コンテキストを読み取り、Installshield が提供する ISSetAllUsers カスタム アクションの代わりにこのカスタム アクションを実行できます。その後、上記のリンクから残りの手順に従うことができます。

于 2016-09-04T20:40:04.360 に答える