3

MSICREATEというプログラムで作成された.msiファイルがあり、次のようにorcaを使用してドクターされています...

InstallExecuteSequenceテーブル

* added FindRelatedProducts with sequence 410
* added RemoveExistingProducts with sequence 1450

InstallUISequenceテーブル

* added FindRelatedProducts with sequence 200

PropertyTable

* added RemovePreviousVersions TRUE
* added SECURECUSTOMPROPERTIES SOLARUPGRADE
* had a existing UpgradeCode with guid created by MSICREATE
* had a existing ProductVersion 12.2.12.0 created my MSICREATE

アップグレードテーブルを追加しました

* UpgradeCode same value as Upgrade in Property Table
* VersionMin null
* VersionMax 99.12.31
* Attributes 1
* ActionProperty SOLARUPGRADE (same value as SECURECUSTOMPROPERTIES in Property Table)

また、新しいPackageCodeと新しいProductCodeを割り当てたため、新しいmsiのPackageCode、ProductCode、およびProductVersionの値は、以前にインストールされた製品とは異なります。

以前にインストールした製品でこのmsiを実行すると、古い製品が削除され、新しいプログラムファイルディレクトリが作成され、.exeを除くすべてのファイルが新しい.msiから再インストールされます。修復すると、.exeが作成されます。古い製品を削除した後に(コントロールパネルの追加/削除プログラムを使用して)新しいmsiをインストールすると、.exeを含むすべてのファイルがインストールされます。

msiexecログファイルはmywebspace.wisc.edu/mdorl/msilog/log3.logです。

.msiはmywebspace.wisc.edu/mdorl/msilog/sbl_Major_Upgrade.msiです

私には奇妙に見える唯一のものは、ログからの次の行です。1番目、2番目、および4番目はインストールされるファイルであり、3番目はインストールされない.exeファイルです。このエントリのNULLアクションに注意してください。

Action start 8:04:41: InstallValidate.
MSI (s) (18:F4) [08:04:41:671]: Feature: _MainFeature; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (18:F4) [08:04:41:671]: Component: _24A30964F6B6462282E161248AF15827; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (18:F4) [08:04:41:671]: Component: _7B95B32E33EB4F699B44D53CA5BC22B5; Installed: Absent;   Request: Local;   Action: Local
MSI (s) (18:F4) [08:04:41:671]: Component: _2FBD153583AF40C09EB9920149F7C7B7; Installed: Absent;   Request: Local;   Action: Null
MSI (s) (18:F4) [08:04:41:671]: Component: _38A400D7DB76479CA0EC6D643D5793CD; Installed: Absent;   Request: Local;   Action: Local
4

4 に答える 4

1

ログの603行目を見ると、次のことがわかります。

MSI(s)(18:10)[08:04:41:827]:別のクライアントが存在するためコンポーネントのアンインストールを禁止:{ADC6C3E9-A0CF-4AFC-9998-7B9449C8EA10} MSI(s)(18:10)[08 :04:41:827]:別のクライアントが存在するためコンポーネントのアンインストールを禁止:{F74907E7-607E-49D1-B613-D63A36ADB020} MSI(s)(18:10)[08:04:41:827]:のアンインストールを禁止コンポーネント:{B1FE4023-E176-42BC-92C3-15B8E50CFBB0}別のクライアントが存在するためMSI(s)(18:10)[08:04:41:827]:コンポーネントのアンインストールを禁止:{E6F5DF5D-3460-4B44-8743- 48787E68A2C1}別のクライアントが存在するため

これは、同じマシンにインストールされている複数のパッケージ間で同じコンポーネントが共有されている場合に発生する可能性があります。Windowsインストーラーは、コンポーネントのrefcountを保持し、それらを使用するすべてのアプリケーションが削除されるまで、コンポーネントを削除できるようにします。

テスト/開発マシンでこれに遭遇した場合は、他の以前のテストがこれに影響を与えないことを確認するために、クリーンなVMでテストすることをお勧めします。

また、他のアプリケーションのパッケージで同じコンポーネントを使用したことがわかっている場合は、それらを編集して、各コンポーネントにパッケージごとに一意のGUIDがあることを確認してください。

于 2012-02-14T14:47:46.043 に答える
1

キーファイルは、Windowsインストーラーによって、コンポーネントとそのGUIDを検出するために使用されます。詳細は、次のとおりです。http: //msdn.microsoft.com/en-us/library/windows/desktop/aa370561( v=vs.85) .aspx

ご想像のとおり、Windowsインストーラーはファイルのバージョンもチェックしています。これは、新しいバージョンで正しくインクリメントされたと想定しています。従うルールは次のとおりです。http: //msdn.microsoft.com/en-us/library/windows/desktop/aa368599 (v = vs.85).aspx

EXEのファイルテーブルのバージョン列を、マシンにすでに存在する値よりも高い値に設定する必要があります。そうしないと、Windowsインストーラーは、バージョンが高いため、古いものを保持する方がよいと判断します。

于 2012-02-14T15:59:25.680 に答える
1

このアイテムにいくつかの閉鎖を置くために、これが私が発見したことと私が物事を修正するためにしたことです。

1)バージョン管理された/バージョン管理されていないファイルの意味についてはまだあいまいです。すべての.exeファイルがバージョン管理されていると思います。これは、そのようなファイルがファイルテーブルに対応するバージョンを必要とすることを意味すると思います。

2)ファイルテーブルのバージョンがProductVersionに接続する必要がないことを理解しました。

3)違法なProductVersionを使用しています。2012.02.16。12.2.16のようなものを使用するように切り替えました。

4)VisualStudioで.exeVS_VERSION_INFO FILEVERSIONを設定し、同じ値を[ファイルテーブルのバージョン]フィールドに追加しました。

これで、メジャーアップグレードを実行すると、すべてのファイルが置き換えられます。

于 2012-02-16T16:53:12.277 に答える
0

ファイルテーブルALLのエントリにはバージョンがありません。.exe以外のファイルの扱いが異なり、再インストールされるのはなぜですか?

他のファイルのバージョンが上がっていると思います。Windowsインストーラーは、パッケージのすべてのファイルにバージョン管理ルールを適用する必要があります。

つまり、これは、ユーザーがメジャーアップグレードmsiを使用して古いバージョンの製品をインストールすることは不可能であることを意味しますか?

新しいパッケージでバージョンを小さくしたい場合、解決策はわかりません。もちろん、カスタムアクションを除いて。

そして、何が合法的なバージョンを構成しますか?ある場所では255.255.65535が表示され、別の場所では65535.65535.65535.65535が表示されます。

どちらも正しいバージョン番号です。後者の値は通常、マシンからの他の既存のファイル、つまりOSで許可されている最大のバージョン番号を確実に置き換えるためにファイルに設定されます。 http://msdn.microsoft.com/en-us/library/windows/desktop/aa368596(v=vs.85).aspx

于 2012-02-15T07:24:50.293 に答える