我使用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
答案 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