4

nsis を使用して Windows 用のインストーラーを作成しています。このインストーラーには、xampp 上で実行される Web アプリケーションが含まれているため、xampp もこのアプリケーションと共にサービスとしてインストールされます。ただし、xamp を Windows 7 の 64 ビット マシンにインストールすると問題が発生します。これは、ここで説明した C:\Program Files (x86) のディレクトリ パスの問題が原因です。

XAMPP エラーの解決策? Windows XP デュアル ブート マシンにインストールしました

ただし、現在、自動インストール パスはインストーラーで次のように設定されています。

C:\Program Files (x86)\myapplication

インストーラー スクリプトには、ディレクトリ チューザー ページを追加するための次のマクロがあります。

!insertmacro MUI_PAGE_DIRECTORY

解決策として、私がやろうとしていることは次のアクションです。

  1. デフォルトのディレクトリを c:\Program Files に変更します
  2. ユーザーが x86 フォルダを選択すると、別のディレクトリを選択するようエラー メッセージが表示されます。

そのためには、インストール ディレクトリ パスを取得する必要があります。

$INSTDIR

  1. そのパスに x86 の部分文字列があるかどうかを確認します
  2. もしそうなら、エラーメッセージを教えてください。
  3. デフォルトのパスを c:\Program Files に変更します

私は nsis にあまり詳しくないので、このプログラムを書くことができません。

誰かがこの問題について私を助けることができますか?

4

2 に答える 2

8

NSIS は $PROGRAMFILES32 と $PROGRAMFILES64 を提供します。

InstallDir "$PROGRAMFILES64\myapp"
于 2012-05-04T15:57:20.623 に答える
3

win7/64 では、%ProgramW6432%環境変数を介して 32 ビット アプリケーションから 64 ビット プログラム ファイルを取得できます。

あなたはそれを取得しようとすることができますReadEnvStr:

  • 32 ビット システムでは、空の文字列が返されます。
  • 64ビットシステムでは返さc:\program filesれます(他の場所で構成されていない場合)

これをテストするスニペットは次のとおりです。

ReadEnvStr $0 ProgramW6432
StrCmp $0 "" 0 +3
MessageBox MB_OK "it is a 32b system"
goto +2
MessageBox MB_OK "it is a 64b system"

あなたの場合、それはできる:

ReadEnvStr $0 ProgramW6432
StrCmp $0 "" +2 0
StrCpy $INSTDIR $0

編集:拒否するポイントについては、別の質問のためにアンダースによって提供されProgram Files (x86)たコールバックメソッドを使用できます。ユーザーが選択したディレクトリを、ページを変更する前にチェックします。.onVerifyInstDir

Function .onVerifyInstDir
  ReadEnvStr $0 "ProgramFiles(x86)"
  StrCmp $0 $INSTDIR 0 PathGood
  MessageBox MB_OK "directory not valid for installation"
  Abort
PathGood:
FunctionEnd

ここでは、別の環境変数を使用して、プログラム ファイルの (x86) バリアントを取得します。

于 2012-05-04T12:32:41.547 に答える