ror*_*yok 3 directory permissions custom-action wix
我正在使用Wix为ASP.NET MVC Web应用程序创建安装程序,我需要在站点中的特定文件夹上设置IIS_WPG的写入权限.我找到了一个如何使用cacls.exe执行此操作的示例(我认为,仍然没有工作):
<CustomAction Id="PermissionAppData" Directory="TARGETDIR"
ExeCommand=""[SystemFolder]cacls.exe"
"[INSTALLDIR]\Content\uploads"
/T /E /G IIS_WPG:M" Return="check" />
Run Code Online (Sandbox Code Playgroud)
但是,我听说这PermissionEx
更好,因为它修改ACL而不是覆盖,(虽然这里的/ E修饰符声称做同样的事情?)所以我更愿意使用它,如果可能的话.我可以PermissionEx
在安装目录和所有子文件夹上找到设置权限的唯一示例- 我不想这样做.
如何使用PermissionEx
来修改一个文件夹的权限之内我的安装文件夹?
好的,这是我到目前为止所得到的 - 基于Yan在下面的答案以及在线的其他一些例子
我的文件夹结构......
<Fragment>
<!-- Will default to C:\ if that is the main disk-->
<Property Id="ROOTDRIVE"><![CDATA[C:\]]></Property>
<Directory Id="TARGETDIR" Name="SourceDir">
<!-- Will reference to C:\inetpub-->
<Directory Id="INETPUB" Name="Inetpub">
<!-- Will reference to c:\Inetpub\wwwroot-->
<Directory Id="WWWROOT" Name="wwwroot">
<!-- Will reference to c:\Inetpub\wwwroot\Demowebsite-->
<Directory Id="INSTALLFOLDER" Name="DemoWebsite">
<Directory Id="CONTENT" Name="Content">
<Directory Id="UPLOAD" Name="upload">
</Directory>
</Directory>
</Directory>
</Directory>
</Directory>
</Directory>
</Fragment>
Run Code Online (Sandbox Code Playgroud)
严的建议
<Fragment>
<DirectoryRef Id="UPLOAD">
<Component Id="SetFolderPermissions" Guid="*">
<CreateFolder>
<util:PermissionEx GenericRead="yes" GenericExecute="yes" User="[SC_IUSR_USERNAME]" Domain="[SC_IUSR_DOMAIN]"/>
<util:PermissionEx GenericRead="yes" GenericExecute="yes" GenericWrite="yes" Delete="yes" User="[SC_ASPNET_USERNAME]" Domain="[SC_ASPNET_DOMAIN]"/>
</CreateFolder>
</Component>
</DirectoryRef>
</Fragment>
Run Code Online (Sandbox Code Playgroud)
这似乎什么都不做.未为IIS_IUSRS帐户设置权限.我也尝试过trycatchfail的这个解决方案
<Product>
<!-- rest of product code removed for brevity -->
<Property Id="WEBUSER" Value="Byah" />
<Property Id="WEBDOMAIN" Value="Byah" />
<CustomAction Id="SetWebuserIIS7" Return="check" Property="WEBUSER" Value="IIS_IUSRS" />
<CustomAction Id="SetWebuserIIS6" Return="check" Property="WEBUSER" Value="IUSR_[ComputerName]" />
<CustomAction Id="SetDomainIIS7" Return="check" Property="WEBDOMAIN" Value="" />
<CustomAction Id="SetDomainIIS6" Return="check" Property="WEBDOMAIN" Value="[ComputerName]" />
</Product>
<Fragment>
<DirectoryRef Id="UPLOAD">
<Component Id="SetFolderPermissions" Guid="*">
<CreateFolder>
<util:PermissionEx User="NetworkService" GenericAll="yes" />
<util:PermissionEx User="Administrators" GenericAll="yes" />
<util:PermissionEx User="Users" GenericRead="yes" GenericExecute="yes" />
<util:PermissionEx User="[WEBUSER]" Domain="[WEBDOMAIN]" GenericAll="yes" />
</CreateFolder>
</Component>
</DirectoryRef>
</Fragment>
Run Code Online (Sandbox Code Playgroud)
这是一个简单的样本:
<DirectoryRef Id="WebsiteFolder">
<Component DiskId="1" Id="DummyComponentForPermissionsWebsite" Guid="{GUID-GOES-HERE}">
<CreateFolder>
<util:PermissionEx GenericRead="yes" GenericExecute="yes" User="[SC_IUSR_USERNAME]" Domain="[SC_IUSR_DOMAIN]"/>
<util:PermissionEx GenericRead="yes" GenericExecute="yes" GenericWrite="yes" Delete="yes" User="[SC_ASPNET_USERNAME]" Domain="[SC_ASPNET_DOMAIN]"/>
</CreateFolder>
</Component>
</DirectoryRef>
Run Code Online (Sandbox Code Playgroud)
这是一个快速解释:
<Directory>
与Id="WebsiteFolder"
某处定义<CreateFolder>
元素是必需的,因为此组件中没有其他元素.您可以轻松地将<util:PermissionEx>
元素添加到其他组件,其中包含文件,注册表值等.xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
引用名称空间WixUtilExtension
在编译期间参考