问题描述
使用的打包工具:WIX。
自定义操作是用C ++编写的。
在安装过程中,我的MSI在ProgramData中创建了一个文件夹“ X”,到安装结束时,我需要授予当前登录用户的文件夹共享访问权限(或PC中的任何本地用户,该输入将由该用户在安装),我找不到任何可以帮助我的WIX元素或C ++ API。
我发现在wix中使用element可以提供对文件夹的权限(文件夹属性的“安全性”选项卡),但是我找不到提供共享权限的Wix元素/ C ++ API。(文件属性的“共享”选项卡) 现在,如果您看到“每个人”都具有读取权限,则通过我的MSI,我应该能够在“共享”中为任何用户提供完全访问权限(完全控制)。
解决方法
WiX在其Util扩展中具有此功能:
- https://github.com/wixtoolset/Util.wixext/blob/25973d520d0e5102421549bae8f3e17b720485e9/src/test/WixToolsetTest.Util/TestData/UsingFileShare/PackageComponents.wxs
- https://github.com/wixtoolset/wix3/blob/bda1c281cb0349007d767d5404d6da87076d7d94/test/data/Extensions/UtilExtension/FileShareTests/product.wxs
文档:
- https://wixtoolset.org/documentation/manual/v3/xsd/util/fileshare.html
- https://wixtoolset.org/documentation/manual/v3/xsd/util/filesharepermission.html
Util dll中还有许多其他的WiX特殊功能:https://wixtoolset.org/documentation/manual/v3/xsd/util/
一个具体的模拟示例:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<Product Id="*" Name="WixFolderShare" Language="1033" Version="1.0.0.0" Manufacturer="Someone" UpgradeCode="b3d89acb-71d9-48ab-a3df-886d49965ea3">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MediaTemplate EmbedCab="yes" />
<!--<UIRef Id="WixUI_Mondo" />--> <!-- Diabled main GUI -->
<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<Feature Id="ProductFeature" Title="WixFolderShare" Level="1" />
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="Test Folder">
<Component Feature="ProductFeature">
<File Source="$(env.SystemRoot)\notepad.exe" />
<util:User Id="Everyone" Name="Everyone" />
<!-- Create Share with share permissions -->
<util:FileShare Id="TestShare" Name="TestShareName" Description="This is a test share.">
<util:FileSharePermission User="Everyone" GenericAll="yes"/>
</util:FileShare>
<!-- NTFS ACL permissions -->
<CreateFolder>
<util:PermissionEx User="Everyone" GenericAll="yes" />
</CreateFolder>
</Component>
</Directory>
</Directory>
</Directory>
</Product>
</Wix>