
NSI に MySQL 5.0 をサイレント インストールしたいです。NSI で次のコードを試しました:
ExecWait 'msiexec /i "$INSTDIR\mysql-essential-5.0.27-win32.msi" /qn'
ExecWait "C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqlinstanceconfig.exe -i -q ServiceName=MySQL RootPassword=root ServerType=DEVELOPMENT DatabaseType=MYISAM Port=3306 RootCurrentPassword=root"
これにより、MySQL がインストールされますが、設定は行われません。
設定したい
- パス=ルート
- ポート=3306
- サービス名=Mysql
- リモートマシンからのルートアクセスを有効にする
編集1
現在設定中です...
serverhost が localhost または 127.0.0.1 の場合は機能しますが、ネットワーク上にある他のシステムの IP アドレスの場合は機能しません。
ネットワーク上の PC からサイレント インストールされたデータベースにアクセスしようとすると、次のエラーが発生します。
これは、リモート マシンからのルート アクセスを有効にするためにいくつかのパラメーターを渡す必要があるためだと思います。
答え1
次のようにファイル名を引用符で囲んでみてくださいmysqlinstanceconfig.exe
:
ExecWait 'msiexec /i "$INSTDIR\mysql-essential-5.0.27-win32.msi" /qn'
ExecWait "$\"C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqlinstanceconfig.exe$\" -i -q ServiceName=MySQL RootPassword=root ServerType=DEVELOPMENT DatabaseType=MYISAM Port=3306 RootCurrentPassword=root"
その理由は、実行可能ファイル名へのパスにスペースが含まれているためです。そのパスは、単一のパスを形成するために引用符で囲む必要があります。
答え2
渡されるコマンド全体にスペースが含まれている場合は、ExecWait
で囲む必要があります''
。
パラメータ内部パラメータにスペースが含まれている場合は、囲む必要があります""
。その方法の完璧な例を見ることができます。正しくへの最初の呼び出しでExecWait
。
注意: コマンドにスペースが含まれる可能性がある場合は、コマンドを引用符で囲んでパラメータと区切る必要があります。例: ExecWait '"$INSTDIR\command.exe" parameters'。
ソース:ドキュメンテーション