2

実行可能ファイルを 1 つのファイルにパックするためのコンテンツを含む NSIS スクリプトを作成しました。それは正常に動作します。いくつかのコマンド ライン オプションをいじって、もちろんアンインストーラーに署名することを計画していました。

これがスクリプトのスニペットです。これが機能しない理由がわかりません。

Function .onInit

!ifdef GEN_ONLY_UNINSTALLER
WriteUninstaller "out\uninst.exe"
Quit
!endif

FunctionEnd

このコマンド ライン オプションを使用する場合:

makensis /DGEN_ONLY_UNINSTALLER /V0 _Release_only_uninst.nsi

アンインストーラーを作成して終了することはありません。ここで何が欠けていますか?どこにWriteUninstaller行くべきですか?私はそれを正しい場所で呼んでいないと思います。:)

4

2 に答える 2

4

ジョブの半分しか実行していません。WriteUninstaller 呼び出しを実行するには、生成されたインストーラーを実行する必要があります。

署名できるアンインストーラーを取得するには、次のことを行う必要があります。

  1. アンインストーラー固有の .nsi で makensis を実行します
  2. 同じ .nsi が自身で makensis /Dmysymbol を実行!systemします (終了コードを 0 と比較します)
  3. 手順 2 で生成されたインストーラーを実行するために使用!systemします (WriteUninstaller がアンインストーラーを書き込みます)。
  4. !delfile手順 2 で生成されたインストーラー

おおよそ次のようなものです。

!ifdef STEP2
Function .onInit
WriteUninstaller "out\uninst.exe"
Quit
FunctionEnd
Outfile "$%temp%\genun.exe"
Section
SectionEnd
!else
!system '"makensis" /DSTEP2 "${__FILE__}"' = 0
!system '"$%temp%\genun.exe" /S'
!delfile "$%temp%\genun.exe"
!endif

最初の makensis インスタンスは有効なインストーラーを生成しないため、このスクリプトはエラーで失敗します。このコードは実際のインストーラーを作成するスクリプトに追加できるため、通常は問題ありません... (完全なスクリプトはアンインストーラーを生成します、署名し、インストーラーを生成してから署名します)

于 2012-06-11T14:40:14.240 に答える
1

これはあなたが思っていることをしていません:o)

あなたが書いているのは、起動時にアンインストーラー(インストーラーのエントリーポイント)を作成する(または作成しない)インストーラーを作成しているというifdefことですonInit

于 2012-06-11T14:07:17.243 に答える