0

Windows 7 ボックスのパッケージ ツールとして NSIS を使用しています。

ファイルの所有権とアクセス許可を、ソースディレクトリで必要なものに非常に慎重に設定しました。

ただし、パッケージ化を実行してからパッケージを展開すると、すべてのファイルの所有権が「管理者」に変更されました。

私はもともと「RequestExecutionLevel admin」を持っていましたが、行を削除した後でも、NSIS は「Administrators」を所有者としてファイルを展開し続けました。

これは私に大きな頭痛の種を与えています。

これに関するリードをいただければ幸いです。

「AccessControl」プラグインをデプロイしましたが、そのドキュメントがまだ見つからないため、それも役立ちます。

4

2 に答える 2

1

NSIS は、ソース ディレクトリからのアクセス許可を保持しません (これは煩わしく、FAT32 および Posix では機能しません)。

Windows には、管理者グループのユーザーによって作成されたファイルがすべての管理者に属するか、またはその 1 人のユーザーだけに属するかを決定するグループ ポリシー設定があります。

OutFile Test.exe
RequestExecutionLevel user
InstallDir "$Temp\Test"

Section
SetOutPath "$InstDir"

!addplugindir "C:\NSIS\MyDownloadedPlugins\AccessControl\Plugins\"
AccessControl::SetFileOwner "$InstDir" "Anders"
Pop $0
DetailPrint $0

; S-1-5-32-545 is BUILTIN\Users
AccessControl::GrantOnFile "$InstDir" "(S-1-5-32-545)" "GenericRead + AddFile + AddSubdirectory"
Pop $0
DetailPrint $0

AccessControl::DenyOnFile "$InstDir" "(BA)" "AddFile" ; Silly example: Don't let people in the Administrators group create new files
Pop $0
DetailPrint $0

SectionEnd
于 2015-04-10T23:56:31.090 に答える
0

RequestExecutionLevelに関するこのセクションは、NSIS が所有権を管理者に設定する際の問題をおそらく説明していると思います。

4.8.1.34 リクエスト実行レベル

なし|ユーザー|最高|管理者

Windows Vista 以降の要求された実行レベルを指定します。この値は、インストーラーとアンインストーラーの XML マニフェストに埋め込まれ、インストーラーが必要とする特権レベルを Windows に伝えます。user は、管理者権限を持たない通常のユーザー レベルを要求します。maximum は、現在のユーザーが使用できる最高の実行レベルを要求し、Windows がユーザーに権限昇格を確認するように求めます。プロンプトで、ユーザーのパスワードが要求される場合があります。admin は管理者レベルを要求し、Windows はユーザーにもプロンプトを表示します。なしを指定すると、これはデフォルトでもあり、マニフェストを空のままにし、必要な実行レベルを Windows に決定させます。Windows は、NSIS インストーラーを自動的に識別し、管理者権限が必要であると判断します。このため、 none と admin [および default]は実質的に同じ効果があります。

少なくとも Microsoft は、すべてのアプリケーションに必要な実行レベルを設定することを推奨しています。マークのないインストーラーは、互換モードの対象となります。このモードの回避策には、ユーザーのスタート メニューで作成されたショートカットをすべてのユーザーのスタート メニューに自動的に移動することが含まれます。システム フォルダーに何もインストールしたり、ローカル コンピューターのレジストリ (HKLM) に書き込む必要がないインストーラーは、ユーザー実行レベルを指定する必要があります。

このトピックの詳細については、MSDN を参照してください。

基本的に、要求されたアクセスレベルをuser|highest以外に設定するか、設定しないと、すべてがadminに設定されます。

私の解決策は、要求されたアクセスレベルをuserに設定することです。

于 2015-04-13T17:42:43.757 に答える