38

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

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

4

6 に答える 6

37

AccessControlプラグインを使用して、これをスクリプトに追加します。ここで、「logs」ディレクトリはインストールディレクトリにあります。

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

これにより、すべてのユーザーがフォルダーに完全にアクセスできるようになります。

于 2008-09-22T19:47:19.827 に答える
18

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

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

S-1-5-32-545 は、 Microsoft Support: Well-known security identifiers in Windows operating systems によると、「ユーザー」に相当します。

于 2010-10-13T16:01:41.547 に答える
9

プログラムファイルの下のディレクトリのアクセス許可を変更する代わりに、すべてのユーザーが書き込み可能な場所にログを配置してみませんか。

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

于 2008-09-24T18:56:59.913 に答える
6

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

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

于 2011-03-03T08:57:32.750 に答える
5

1つの方法:シェルを呼び出し、caclsまたはを使用しますxcacls

于 2008-09-22T19:21:05.147 に答える
2

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

于 2008-09-22T19:22:33.660 に答える