Permissions Wix:使用permissionEx设置installfolder中文件夹的权限

Permissions Wix:使用permissionEx设置installfolder中文件夹的权限,permissions,wix,directory,custom-action,Permissions,Wix,Directory,Custom Action,我正在使用Wix为ASP.NET MVC web应用程序创建安装程序,我需要在站点中的特定文件夹上设置IIS_WPG的写入权限。我找到了一个关于如何使用cacls.exe执行此操作的示例(我想,它还没有运行): <CustomAction Id="PermissionAppData" Directory="TARGETDIR" ExeCommand="&quot;[SystemFolder]cacls.exe&quot

我正在使用Wix为ASP.NET MVC web应用程序创建安装程序,我需要在站点中的特定文件夹上设置IIS_WPG的写入权限。我找到了一个关于如何使用cacls.exe执行此操作的示例(我想,它还没有运行):

<CustomAction Id="PermissionAppData" Directory="TARGETDIR" 
  ExeCommand="&quot;[SystemFolder]cacls.exe&quot; 
  &quot;[INSTALLDIR]\Content\uploads&quot; 
  /T /E /G IIS_WPG:M" Return="check" />
严的建议

<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> 

这似乎没什么用。未为IIS\u IUSRS帐户设置权限。我也尝试过这个解决方案


这是一个简单的示例:

<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>

下面是一个简单的解释:

  • 上面的示例假定在某个地方定义了一个
    ,其中定义了
    Id=“WebsiteFolder”
  • 元素是必需的,因为此组件中没有其他元素。您可以轻松地将
    元素添加到包含文件、注册表值等的其他组件中
  • 当然,上面的组件必须是特性的一部分
  • 根WiX元素必须具有
    xmlns:util=”http://schemas.microsoft.com/wix/UtilExtension“
    引用了命名空间
  • 编译期间必须引用
    wixutileextension

我们可以使用PermissionEx代替Permission


这对我有用。

谢谢你。这似乎是在运行和设置权限,但当我通过“文件属性”中的“安全”选项卡检查权限时,我收到以下消息
上载权限的顺序不正确,这可能会导致某些权限无效
(上载是我文件夹的名称),有什么想法吗?唯一的区别是,我为第一个权限节点添加了
GenericWrite=“yes”
。嗯,我肯定记得我见过这样的警告,但我不记得它到底是什么。。。似乎这与有效的权限有关。如果我没记错的话,在高级安全区域的某个地方一定有一个“重新排序”按钮。试着点击它,看看有什么变化。重新排序似乎只是修复了权限。此外,上面的代码现在对安装文件夹中的每个文件夹设置这些权限,而不仅仅是上载文件夹。需要明确的是,my
DirectoryRef
绝对是正确的文件夹,而不是根文件夹或任何类似的愚蠢文件夹什么是
User=“[SC\u ASPNET\u USERNAME]”域=“[SC\u ASPNET\u Domain]
??他们是系统默认用户吗?还是我们需要定义他们?你需要定义他们。这只是我一直在做的项目的一个例子。我记得过去也有过这个问题。当时我们做了很多更改,但据我所知,Traverse=“yes”属性起了作用。使用PermissionEx”是指它添加或修改基本权限,因此如果您想添加一个小的调整,则无需复制它们。“权限”用您的配置替换所有权限。
<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> 
<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>
            <CreateFolder>
                    <Permission User="Users" GenericAll="yes" />
                    <Permission User="Administrators" GenericAll="yes" />
                </CreateFolder>