WIX 不会将 DLL 复制到 system32 文件夹中

WIX won't copy DLL into system32 folder

我需要将一个 DLL 复制到 system32 文件夹中,那是我的 WIX 脚本,但它不起作用,复制命令失败了:

<?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="LMBrick Service" Language="1033" Version="1.3.0.0"
           Manufacturer="MyCompany" UpgradeCode="3de1a175-3701-435f-90bc-e97cb66b5524">
    <Package InstallerVersion="200" Compressed="yes" InstallPrivileges="elevated" AdminImage="yes" InstallScope="perMachine" Platform="x64" />
<Property Id="MSIUSEREALADMINDETECTION" Value="1" />
    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
    <Media Id="1" Cabinet="cab1.cab" EmbedCab="yes" />

    <Feature Id="ProductFeature" Title="LMBrickServiceInstallation" Level="1">
      <ComponentGroupRef Id="LMBrickComponents" />
    </Feature>

    <CustomAction Id="InstallLMBrickDll" Directory="LMBRICKINSTALLFOLDER" Execute="deferred" Impersonate="no"
                  ExeCommand="copy LMBrick.dll [System64Folder]LMBrick.dll"
                  Return="check" />

    <InstallExecuteSequence>

      <Custom Action="InstallLMBrickDll" After="InstallFiles">NOT Installed</Custom>
    </InstallExecuteSequence>

  </Product>

  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFiles64Folder">
        <Directory Id="Company" Name="MyCompany">
          <Directory Id="App" Name="MyProduct">
            <Directory Id="LMBRICKINSTALLFOLDER" Name="LMBrickService">
            </Directory>
          </Directory>
        </Directory>
      </Directory>
    </Directory>
  </Fragment>

</Wix>

运行 Exes 必须执行的自定义操作实际上 运行 一个 exe。但是 copy 不是 exe;它内置于命令 shell 中。所以你有两个直接的选择(后面还有两个更好的选择):

  • 找到一个实际的 exe,例如 xcopy.exe 和 运行,或者
  • 执行一个shell,例如cmd.exe,参数调用它的copy内置函数。

您可以通过打开命令提示符并分别执行命令 where copywhere xcopy 来确认这一点。请注意,以 Exe 形式启动 cmd.exe 或任何控制台程序将导致控制台 window 在安装过程中闪烁。这通常看起来很不专业,您应该使用以下两种选择之一:

  • WixQuietExec 等包装器可以抑制控制台 window,或
  • 内置 Windows 安装程序功能,例如通过 CopyFile 公开,可以完全避免自定义操作的需要。

如果可能,最好避免自定义操作并使用 Windows 安装程序功能。因此,如果可以的话,请瞄准最后一个选项。