我的目标是将我的应用程序安装到文件夹中:
我尝试了wix Permission
和PermissionEx
元素的各种组合和排列。
我最近的尝试是:
<CreateFolder>
<util:PermissionEx User="Users" GenericRead="no" Read="no"/>
<util:PermissionEx User="Everyone" GenericRead="no" Read="no"/>
<util:PermissionEx User="Administrators" GenericAll="yes"/>
</CreateFolder>
在Component
元素内。
我的结果始终相同:用户仍然显示读取,读取和执行以及列表文件夹内容的权限在已安装的文件夹上。
我的目标与Restrict access to a folder installed using wix installer
非常相似我还考虑了WIX: Giving Permissions to a folder和Wix: How to set permissions for folder and all sub folders。
答案 0 :(得分:1)
我只是想知道你的总体目标是什么(可以应用几个选项):
我确信您非常清楚,修改ACL会产生很多副作用,特别是拒绝权利(在自我修复过程中会发生什么?)。我现在没有时间测试特定的ACL,但如果你仍然需要,我会在明天再次检查。我认为require admin rights选项可能对您有用吗?
只想添加quick way来测试我发现的权限。只需在Windows资源管理器中根据需要修改ACL权限即可。然后启动提升的命令提示符并导航到要捕获其ACL的文件夹。然后去:
cacls.exe foldername /s
这应显示SDDL string您可以直接在WiX中转储以使用MSI文件中新的内置LockPermissionEx
表格( MSI 5 only! ) :
<Component Feature="ProductFeature">
<File Source="Files\Test.exe" />
<CreateFolder>
<PermissionEx Id="p1" Sddl="D:PAI(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICI;0x1200a8;;;BU)" />
</CreateFolder>
</Component>
以上内容应该产生一个文件夹,该文件夹具有SYSTEM,Administrators和&#34;特殊访问权限的完全访问权限。对于常规用户(遍历文件夹/运行文件,读取属性,读取扩展属性,读取访问权限)。如下所述,这不能很好地工作,因为管理员通常运行非提升,然后模仿常规用户(不是100%确定这是如何工作的。)
如您所知,many, different WiX elements that relate to permissioning(中间页),您还可以使用自定义操作进行权限管理(不推荐)。明天再去测试一下。 也许升级的EXE与受保护的数据文件夹的组合可以起作用?或者可能是一种让系统尝试启动它指向的文件而没有提升的触发快捷方式调用高程的方法。
更新:今天没有多少测试,但我考虑了可能的选项列表。其中一些选项只是记下来而不是真的可行。他们会把事情排除在外,看看他们是否可以激发新的更好的想法。可能是8
,1
,2
,3
&amp;可以使用6
吗?也许是组合?
组合? :超级隐藏的安装文件夹,也是ACL锁定的,并且通过从映射驱动器运行的始终提升的EXE来访问? (访问基于访问的枚举服务器共享?):
使文件夹超级隐藏 :这可能是一个愚蠢的选择。这取决于您的用例以及这些文件必须受到何种保护?他们只是想要看不见,还是他们必须被锁定&#34;无法进入? You can set a super-hidden flag for your folder with a simple attrib command:
attrib +s +h "C:\Folder\"
该文件夹现在像某些核心操作系统文件夹一样是超级隐藏的。除非您采取特殊步骤使其显示(显示隐藏的操作系统文件 - 请参阅上面的链接),否则此类文件夹不会显示在Windows资源管理器或命令行中。但是,如果用户知道该文件夹在那里,则不会锁定该文件夹以进行访问。也许你可以将超隐藏旗帜与另一种方法相结合? (隐藏文件夹并将其锁定?)
基于访问权限的枚举服务器共享 :这个新的服务器功能似乎是您实际需要的。它隐藏了有问题的用户没有访问权限的文件夹,但我不认为该功能可以在普通PC(非服务器)上使用。也许它可以吗?稍后要检查的东西。我不知道是否可以选择在服务器共享上存储文件?
答案 1 :(得分:1)
如果您可以找到(或创建)具有所需权限的文件夹,我将首先使用CACLS.exe以SDDL格式显示权限。完成后,您可以在MSI中使用MsiLockPermissionsEx表。
WiX似乎没有直接支持MsiLockPermissionsEx表,因为似乎没有办法只是粘贴SDDL字符串来应用于某些东西,除非我在某处错过了它。