NSIS でディレクトリのアクセス許可を設定するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/116876

質問

Nullsoft Install System を使用して、管理者によるインストールが必要な Windows インストーラーを構築しようとしています。インストーラは「logs」ディレクトリを作成します。通常のユーザーはこのアプリケーションを実行できるため、そのディレクトリは通常のユーザーが書き込み可能である必要があります。すべてのユーザーが NSIS スクリプト言語でそのディレクトリへの書き込みアクセス許可を持つように指定するにはどうすればよいですか?

これは一種の悪いアイデアのように聞こえることは認めますが、このアプリケーションはプライベート ネットワーク上の少数の人だけが使用する単なる内部アプリです。何か問題が発生した場合にアプリが壊れる理由を確認できるように、ログ ファイルを保存する必要があるだけです。ユーザーを管理者にすることはできません。

役に立ちましたか?

解決

使用 アクセス制御 プラグインを作成し、これをスクリプトに追加します。「logs」ディレクトリはインストール ディレクトリ内にあります。

AccessControl::GrantOnFile "$INSTDIR\logs" "(BU)" "FullAccess"

これにより、すべてのユーザーにフォルダーへの完全なアクセス権が与えられます。

他のヒント

AccessControl::GrantOnFile "<folder>" "(BU)" "FullAccess" Windows Server 2008 マシンでは機能しませんでした。代わりに、これを使用する必要がありました。

AccessControl::GrantOnFile "<folder>" "(S-1-5-32-545)" "FullAccess"

S-1-5-32-545 は「ユーザー」に相当します。 http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q243330

Program Files の下のディレクトリのアクセス許可を変更する代わりに、すべてのユーザーが書き込み可能な場所にログを保存してみてはいかがでしょうか。

NSIS ドキュメントの「4.9.7.7 SetShellVarContext」セクションを参照してください。これを $APPDATA とともに使用すると、すべてのユーザーが書き込み可能なアプリケーション データ フォルダーを取得できます。

これはもう古い問題ですが、Sören が示唆しているように、APPDATA ディレクトリはやりたいことを行うための良い方法です。ユーザーの個人的な APPDATA ではなく、「すべてのユーザー」の APPDATA ディレクトリを取得してください。これにより、誰でもログ ファイルにアクセスできるようになります ;-)

また、GrantOnFile で (BU) を使用すると、一部のシステム (私の記憶が確かであれば Win 7 x64) でうまく機能しないということをどこかで読んだので、代わりに SID "(S-1-5-32-545)" を使用する必要があるかもしれません。 (これはすべてのユーザーの SID であり、この値は各 Windows OS の定数です)

一方通行:シェルを呼び出して使用します cacls または xcacls.

ユーザーの %APPDATA% ディレクトリにログ ディレクトリを作成してみてはいかがでしょうか?本当にすべてのログをインストール ディレクトリに置く必要がありますか?なぜ?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top