MSI安装程序、64位操作系统、写入\windows\system32\inetsrv文件夹。

3
在Windows Server 2008 64位上,我需要一个.msi安装程序将一些文件写入\windows\system32\inetsrv文件夹。(这些文件是一些XML模式验证文件,C# XmlReaderSettings.Schema.Add()希望这些文件在该文件夹中)。
当安装程序运行时,文件最终出现在\windows\SysWOW64\inetsrv文件夹中,而不是它们应该在的位置。
我尝试让安装程序写入\windows\Sysnative文件夹,但安装程序创建了一个具有完全相同名称的文件夹,这是我没有预料到的。请参见this page以获得有关抑制SysWOW64重定向的良好讨论。
我应该如何让.msi在Windows 2008 64位上将我的文件写入\windows\system32\inetsrv文件夹?
3个回答

2
这里是您可以使用的系统文件夹属性。我知道这似乎有些违反直觉,但您尝试过System64Folder吗?请阅读备注。
如果那样不起作用,请尝试将System32添加到WindowsFolder的末尾。
编辑-1:尝试在您的组件元素上设置Win64属性,看看重定向行为是否会改变。

Jeff,您提供的系统文件夹属性很有用。但是,如果我尝试使用System64Foler,则会出现编译器错误,指示目标平台不兼容。我的应用程序必须安装在x86和x64上。将System32添加到WindowsFolder的末尾会导致输出转到\Windows\SysWOW64\,因为受到SysWOW64重定向的影响。 - aaaa bbbb
糟糕,这就是我知道的全部了。:( - i_am_jorf
我正在试图找到在Visual Studio中设置win64的位置。可能是通过目标平台x86来完成的吗? 我也担心一旦在项目制作中设置了这个值,它将不再安装在32位机器上。有什么提示和想法吗? - aaaa bbbb
你需要将它放在 WiX XML 中,而不是项目构建配置中。应该有一个 <component> 标签。请参阅链接... - i_am_jorf

1

我尝试在wxs文件中使用Sysnative,但结果相同:在Windows下创建一个Sysnative文件夹,而不是使用System32。因此,我在vbscript CA中使用了Sysnative:找到Windows文件夹(&H24&)并添加\Sysnative。这有效,但需要第二个CA在卸载期间删除文件。


0
我通过将文件写入\windows而非\windows\system32解决了我的问题。 原来,C# XmlReaderSettings.Schema.Add()可以使用\windows目录下的完整路径。如果提供的路径不是完全限定的,则它会默认为system32文件夹。 这并不是问题的答案,但对于我当前的需求来说,这是一个解决方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接