如何使用自定义操作在WiX中运行脚本 - 最简单的示例?

nra*_*ray 11 installer windows-installer wix

新手WiX的问题:我如何
1.复制一个一次性使用的shell脚本来临时与安装程序一起

  <Binary Id='permissions.cmd' src='permissions.cmd'/>  
Run Code Online (Sandbox Code Playgroud)

2.在安装结束时查找并运行该脚本.
例如

<CustomAction Id='SetFolderPermissions' BinaryKey='permissions.cmd' 
    ExeCommand='permissions.cmd' Return='ignore'/>  

<InstallExecuteSequence>
    <Custom Action="SetFolderPermissions" Sequence='1'/>
</InstallExecuteSequence>  
Run Code Online (Sandbox Code Playgroud)

我想我至少有三个问题:

  • 我找不到permissions.cmd来运行它 - 我需要[TEMPDIR] permissions.cmd还是什么?
  • 在安装程序之前,我的序列太快了.
  • 我在这里的某个地方需要cmd/c permissions.cmd,可能在ExeCommand附近?

在此示例中,permissions.cmd使用cacls.exe将具有写权限的交互式用户添加到%ProgramFiles%\ Vendor ACL.我也可以使用secureObject - 问题是"我如何将交互式用户添加到本地化Windows中的目录"?

Che*_*rra 5

我发现博客文章《从MSI到WiX,第5部分-自定义操作:简介》在我想了解WiX中的CustomActions时很有用。

您还可以在CustomAction Element中找到CustomAction的定义及其属性。

你需要做这样的事情

<CustomAction Id="CallCmd" Value="[SystemFolder]cmd.exe" />
<CustomAction Id="RunCmd"  ExeCommand="/c permission.cmd" />
<InstallExecuteSequence>
    <Custom Action="CallCmd" After="InstallInitialize" />
    <Custom Action="RunCmd" After="CallCmd" />
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)


use*_*402 5

这是一个工作示例(用于设置权限,而不是用于运行脚本):

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="ProgramFilesFolder" Name="PFiles">
    <Directory Id="BaseDir" Name="MyCo">
      <Directory Id="INSTALLDIR" Name="MyApp" LongName="MyProd">

        <!-- Create the folder, so that ACLs can be set to NetworkService -->
        <Component Id="TheDestFolder" Guid="{333374B0-FFFF-4F9F-8CB1-D9737F658D51}"
                   DiskId="1"  KeyPath="yes">
          <CreateFolder Directory="INSTALLDIR">
            <Permission User="NetworkService"
                        Extended="yes"
                        Delete="yes"
                        GenericAll="yes">
            </Permission>
          </CreateFolder>
        </Component>

      </Directory>
    </Directory>
  </Directory>
</Directory>
Run Code Online (Sandbox Code Playgroud)

请注意,这是在Permission标记中使用'Extended ="Yes"',因此它使用SecureObjects表和自定义操作而不是LockPermissions表(请参阅权限元素的WiX文档).在此示例中,SecureObjects应用于MyProd目录的权限由子目录继承,而使用LockPermissions时则不是这种情况.