SystemFolder无法正确解析

时间:2017-06-27 07:32:26

标签: c# windows wix windows-installer msiexec

我尝试使用C:\Windows\System32在一个简单的 WIX 设置中将一些文件复制到C:\Windows\SysWOW64文件夹(和SystemFolder)变量。然而,它总是似乎解决了一个奇怪的道路我甚至没有丝毫想到MSI从获得的那些。

基本上,SystemFolder解析为以下内容:E:\SystemFolder\(不,那不是变量,文件夹实际上称为SystemFolder)。

修改

好吧,似乎变量根本没有得到解决。我不知道MSI从哪里获得E:\,但是一旦我将$(var.WindowsSystemFolder)别名,正确解析的变量SystemFolder就会变为SystemFolder(纯文本) ),没有进一步处理。救命。 :S

Variables.wxi(摘录)

<!-- Platform Configuration -->
<?if $(var.Platform) = x64 ?>
<?define WindowsSystemFolder = "System64Folder" ?>
<?else ?>
<?define WindowsSystemFolder = "SystemFolder" ?>
<?endif ?>

Product.wsx(摘录)

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="WINSYSTEMFOLDER" Name="$(var.WindowsSystemFolder)" />
</Directory>

somewhere.wsx

<Fragment>
  <DirectoryRef Id="WINSYSTEMFOLDER">
    <Component Id="RandomComponent" Guid="7784D238-2502-45B4-B5B3-180D31E56485">
      <File Id="RandomFile"
        Name="$(var.MyProject.TargetFileName)"
        Source="$(var.MyProject.TargetPath)" />

标志传递给蜡烛

-dDebug -dPlatform=x86 -arch x86

2 个答案:

答案 0 :(得分:0)

E:\SystemFolder来自TARGETDIR的组合(评估与ROOTDRIVE相同,后者又是系统中具有最大免费金额的驱动器space)和文字文本SystemFolder或System64Folder。这是因为Name attribute定义了路径,而不是对预定义system folder的引用。

How To: Add a File To Your Installer,您可以将系统文件夹属性放在Id属性中。如果您想为他们提供一个可以在没有变量表示法的情况下引用的备用ID,请在其下创建一个没有名称的目录(或者可能是Name='.')。例如,对Product.wsx摘录的这种修改可能有效(我还没有经过测试):

<Directory Id="TARGETDIR" Name="SourceDir">
  <Directory Id="$(var.WindowsSystemFolder)">
    <Directory Id="WINSYSTEMFOLDER"/>
  </Directory>
</Directory>

答案 1 :(得分:0)

您需要run your .msi with logging才能找出它实际要去的地方。

系统文件夹似乎……很特别。在我的日志文件中,它显示了这一点:

Property(S): System64Folder = C:\WINDOWS\system32\
Property(S): SystemFolder = C:\WINDOWS\SysWOW64\
Property(S): System32Folder = C:\

这当然没有意义,但这就是正在发生的事情。