通过SSH运行时,WIX / MSI CopyFile不起作用

时间:2018-08-16 01:28:33

标签: wix windows-installer wix3.10

我使用WixTool 3.10构建了一个简单的MSI文件。
功能之一是复制主机上已经存在的文件。
通过远程桌面安装此msi时,一切正常。
但是,如果我通过SSH登录并运行此MSI,则不会复制该文件。
这是我的wxs文件的简化版本:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Product Id="*" Name="my product" Language="1033" Version="1.0" Manufacturer="Allen" 
           UpgradeCode="PUT-GUID-HERE">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
    <MediaTemplate EmbedCab="yes" />

    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLFOLDER" Name="My Folder">
        </Directory>
      </Directory>
    </Directory>

    <Property Id="FILEA">
      <DirectorySearch Id="SearchSourceDir" Path="[SOURCEDIR]">
          <FileSearch Name="fileA.txt" />
      </DirectorySearch>
    </Property>

    <Component Id="cmpCopyFile" Guid="*" Directory="INSTALLFOLDER">
      <CopyFile Id="CopyFileA" SourceProperty="FILEA" DestinationProperty="INSTALLFOLDER"/>
    </Component>

    <Feature Id="FeatureCopyFile" Title="Copy file" Level="1">
      <ComponentRef Id="cmpCopyFile" />
    </Feature>
  </Product>
</Wix>

这是我用于安装的命令:

msiexec /i test.msi /l*v install.log

在日志中,我可以看到功能部件和组件已安装,但是文件没有被复制。
这是预期的行为吗?任何帮助或建议,不胜感激。

更新: 这是本地安装和远程安装的日志 install_local.log install_remote.log

2 个答案:

答案 0 :(得分:1)

SecureCustomProperties:远程安装是静默的,客户端是交互式的吗?这可能会影响APPSEARCH属性在延迟/静默模式下的可用性。

您需要标记属性为安全的,以便使它们从客户端-(GUI)传递到服务器进程(安装)。您能否尝试在WiX源中更改它并重新编译:

当前

<Property Id="FILEA">

已更新

<Property Id="FILEA" Secure="yes">

然后重新编译并测试安装。


或者,您可以修改或“修复”当前MSI文件中的SecureCustomProperties属性,使其包含FILEA。这涉及沿以下几行在SecureCustomProperties的当前值之前加上FILEA

FILEA;NETFRAMEWORK20;WIX_DOWNGRADE_DETECTED;WIX_UPGRADE_DETECTED

如果您从WiX源重新编译MSI,则显然会为您完成。添加此代码以防源无法使用指定的Secured属性进行编译。


除此之外,从本地日志文件来看这很奇怪:

PROPERTY CHANGE: Adding FILEA property. Its value is 'C:\Users\tetter\fileA.txt\'.

但是让我们看看上面的方法是否可以解决问题。


避免文件复制? :什么是SSH客户端?从未尝试通过SSH部署MSI。不是100%匹配,而是maybe read my answer on the issue of config files and settings management。通过更可靠的方式安装文件很有可能会更加可靠-从当前问题中您可以清楚地看到。例如,通过使用IniFile表或使用WiX的XML编写功能。

应用程序下载 :老实说,为什么不从数据库或直接从应用程序的UNC路径下载这些设置?应该可以节省您任何部署问题,并且您具有更好的调试能力(在测试计算机上进行实时调试,没有“一次性”部署问题,因此可以调查的调试能力有限),并且可以确保所有客户端都拥有最新的设置是否可以访问UNC路径?只是一个主意。

原因 :如果要从理论上讲,我想说您的MSI通过远程桌面在您的管理上下文中运行,并且可以访问您的登录上下文和访问令牌因此拥有股份的权利。当您从SSH启动MSI时,它可能在系统上下文中运行,根本没有网络访问权限-或访问权限非常有限。只是一个猜测。

答案 1 :(得分:0)

如果为区分大小写的源属性使用正确的名称,则可能会有所不同,即SourceDir

https://msdn.microsoft.com/en-us/library/windows/desktop/aa371857(v=vs.85).aspx