1

postgresql 9.1 用の NSIS インストーラー スクリプトを作成しました。インストーラーは正常に動作しますが、再起動後、サービスが開始されません (インストール直後、データベースは正常に開始されます)。

これは、postgres サービス ユーザーの %APPDATA% に pgpass.conf ファイルがないためだと思います。私のインストール スクリプトを理解する限り、pgpass.conf ファイルは、インストーラーを実行しているユーザー (私の場合は管理者アカウント) の %APPDATA% に追加されます。これは役に立ちません。

すべてのユーザーに pgpass.conf を追加するために、次のことを試しましたが、これにより、各ユーザーの %APPDATA% ではなく、一種のワイルドカードに追加されると思います。

SetShellVarContext "all"
SetOutPath "$APPDATA\postgresql"
File config\pgpass.conf
SetShellVarContext "current"
SetOutPath "$APPDATA\postgresql"
File config\pgpass.conf

ドキュメントで c:/Users/postgres のマクロ名が見つかりませんでした。これはそれを達成する方法かもしれません。しかし、WindowsXP 7 では、/Users ディレクトリをアドレス指定するポータブルな方法が必要だと思います。

SetShellVarContext "postgres" のようなものを使用して、NSIS に pgpass.conf ファイルを c:\Users\postgres\AppData\postgresql に書き込むようにできればと思います。

これを行う方法はありますか?

ありがとう !

4

3 に答える 3

1

SetShellVarContext ALL(Win7 の場合) 場所が表示されますが、これは場所 (NSIS の からも取得されます%programdata%) とは異なる場所です (シンボリック リンクを使用すると、同じように見えますが、Dir はまったく異なります!!!)%appdata%$APPDATA

NSIS は、すべてのスイッチと現在のスイッチ%APPDATA%%PROGRAMDATA%応じて、コンテキストを から に変更します。SetShellVarContextしかし、まだ変数を使用してい$APPDATAます。

つまり、ファイルが間違った場所に移動していると推測しています。管理者としてインストールしたいだけだと思いますが、postgresのローカルユーザーに追加のファイルを持たせてpgpass.confください。

書き込み先のパスがすべて異なるため、Win7 か WinXP かに応じて変数を設定します。

テストするには、postgres ユーザーがいることがわかっている場所にファイルを書き込むだけです!

StrCpy $WINVER_VAR "C:\Users\postgresql\AppData\Roaming" ;;or whatever based on OS
SetOutPath "$WINVER_VAR\postgresql"

または、さらに良いことに

File /oname=$WINVER_VAR\postgresql\pgpass.conf pgpass.conf

インストーラーから必要な場所にコピーするだけで、管理者のディレクトリに未使用のコピーを追加しないようにします。

注: XP では、%APPDATA%Documents & Settings にあります。正確なパスは覚えていません。だからあなたは確認する必要があります!

システム上のすべてのユーザーに追加するには... 「プラグインの検索」を調べるか、システム上のすべてのユーザーのリストを取得して、同じことを行います。

于 2012-06-15T23:38:25.720 に答える
1

トークン ハンドルなしで別のユーザーのシェル フォルダーを取得する方法は文書化されていません (トークン ハンドルを取得するには、ユーザーのパスワードが必要です。または、ユーザーがログインしている場合は、SYSTEM として実行している場合はトークンを取得できます)。

次に、文書化されていない領域に移動します。このマクロを試すか、 GetProfilesDirectoryをルートとして自分でパスを作成できます。

于 2012-06-08T16:37:03.120 に答える