0

最近、独自のインストールから InstallShield 2008 に戻りました。ですから、私はまだ学習曲線を上げようとしています。

Firebird と USB ドライバーを使用していますが、適切な msi インストール ソリューションが見つかりませんでした。そのため、firebird をサイレント モードでインストールするコマンド ラインと、ほとんどサイレント モードで USB ドライバーをインストールするコマンド ラインがあります。

このコードをイベント ハンドラー DefaultFeatureInstalled に入れました。これは、初めてのインストールで非常にうまく機能します。しかし、アンインストールを行うと、firebird インストーラーを再度起動しようとするため、DefaultFeatureInstalled イベントを再度送信する必要があります。

使用する別のイベントはありますか、それとも DefaultFeatureInstalled イベントでインストールかアンインストールかを検出する方法はありますか?

4

5 に答える 5

1

Chris さん、MsiGetProperty をまったく機能させるのに苦労しました。持っているコードを追加するだけです

string sRemove;
number nBuffer;

nBuffer = 256;
if (MsiGetProperty(ISMSI_HANDLE, "REMOVE", sRemove, nBuffer) = ERROR_SUCCESS) then
     //do something
endif;

「未定義の識別子」が表示されます。ISにそれを認識させるためにいくつかのことを試みましたが、成功しませんでした。もう少し調べてみると、そもそも IS がアンインストール時に関数を呼び出していないことに気付きました。私は別の機能を持っていました.onEndは同じことを呼んでいたと思います. それを片付けた後、最初に期待していた結果が得られました。

したがって、正しい答えは、DefaultFeature_Installed イベントのコードがアンインストール時に呼び出されないようにするために何もする必要がないということです。

于 2008-09-30T15:43:18.650 に答える
0

InstallScriptまたはInstallScriptMSIプロジェクトを使用している場合は、OnFirstUIBeforeイベントを処理する必要があります。インストーラーを初めて実行したときに呼び出されます。インストーラーが再度起動されると、代わりにOnMaintUIBeforeイベントが発生します。

于 2008-10-09T12:52:09.653 に答える
0

製品がすでにインストールされているかどうか、またはアンインストールが行われているかどうかを示すMSIプロパティがあります。製品がすでに存在する場合、Installedプロパティはtrueになるため、ブール式で使用できます(例:インストールされていません)。アンインストールが行われている場合、REMOVEプロパティは「ALL」に設定されます。これらのプロパティでFirebirdのインストールロジックを調整できる場合があります。これらのプロパティは、MsiGetProperty関数を使用して取得できます。

注:プロパティ名は大文字と小文字によって意味が異なるため、必ず上記の大文字と小文字を使用してください。

ISオンラインヘルプまたはGoogleでDefaultFeatureInstalledイベントへの参照が見つかりませんでした。InstallShieldプロジェクトはBasicMSIまたはInstallScriptですか?

于 2008-09-25T00:20:30.323 に答える
0

私は InstallScript プロジェクトを行っています。

イベントを再確認しましたが、使用している関数はアンダースコア付きの DefaultFeature_Installed です。Net と IS の Web サイトを検索したところ、言及はありましたが、定義はありませんでした。最初にコードをこのイベントに移動した開発者にここで尋ねましたが、彼女はコードをどこに、なぜこのイベントに移動したのか思い出せません。

今朝、MsiGetProperty を調べます。ポインタをありがとう。

于 2008-09-25T14:58:14.113 に答える
0

このコードを DefaultFeature_Installed イベントに追加できます。

string sRemove;
number nBuffer;

nBuffer = 256;
if (MsiGetProperty(ISMSI_HANDLE, "REMOVE", sRemove, nBuffer) = ERROR_SUCCESS) then
     //do something
endif;

注: 関数名は大文字と小文字が区別されます。ISMSI_HANDLE 値は、InstallShield インストール エンジンへのハンドルです。sRemove が「ALL」に等しい場合、これはアンインストールが行われていることを示しており、Firebird のインストールをスキップできます。

于 2008-09-28T00:40:20.193 に答える