我想安装microsoft visual c ++ 2008可再发行组件以及我的msi安装程序。我决定将它与我的安装程序一起作为应用程序文件包含在内,并编写了一个golang代码,用于触发microsoft visual c ++ 2008可再发行组件包的静默安装。我的应用程序的服务仅在安装了microsoft visual c ++ 2008可再发行软件包时启动。我可以在控制面板中看到我的应用程序的卸载选项,但我看不到像microsoft visual c ++ 2008可再发行组件包那样的东西。而且我很确定没有安装软件包,因为我的应用程序永远不会启动,当我单独触发silent.exe(作为管理员),其代码是静默安装它安装的软件包,我的应用程序也正常工作。当我尝试将所有内容打包在一个msi中时会出现问题。
我编写的WiX源文件包含silent.exe以及我的应用程序所需的其他必要文件。
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:util='http://schemas.microsoft.com/wix/UtilExtension'>
<?include "CommonVariable.wxi"?>
<Product Id="*" Language="1033" Manufacturer="Testing" Name="Testing_Name" Version="1.1.1">
<Package InstallerVersion="111" Compressed="yes" Description = "(x64 Edition) MSI Package" Comments="(x64 Edition) MSI Package" InstallPrivileges="elevated" Platform="x64"/>
<Media Id="1" Cabinet="product.cab" EmbedCab="yes"/>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="MYINSTALLLOCATION" Name="$(var.foldername)">
<!-- Component for list of files to add in Installation location -->
<Component Id="ApplicationFiles" Guid="{**********-*******-*******-********}">
<File Id="ApplicationFile" Source="silent.exe" Vital="no" DiskId="1" Hidden="yes"/>
<File Id="ApplicationFile1" Source="Windows2008R2.exe" Vital="no" DiskId="1" Hidden="yes"/>
<File Id="ApplicationFile1" Source="Myfiles" Vital="no" DiskId="1" />
<File Id="ApplicationFile1" Source="Myfiles" Vital="no" DiskId="1" />
</Component>
***other Actions for my Application***
</Directory>
</Directory>
</Directory>
<DirectoryRef Id="MYINSTALLLOCATION">
<Component Id="CleanupMainApplicationFolder" Guid="{**********-*******-*******-********}" Win64="yes">
<util:RemoveFolderEx On="uninstall" Property="MYINSTALLLOCATION" />
</Component>
</DirectoryRef>
<Property Id="MYINSTALLLOCATION" Value="$(var.InstallationLocation)" >
</Property>
<Feature Id="DefaultFeature" Level="1">
<ComponentRef Id="ApplicationFiles"/>
</Feature>
<Binary Id="ExeId" SourceFile="silent.exe"/>
<CustomAction Id="SilentAction" BinaryKey="ExeId" ExeCommand="" Execute='deferred' Return ='asyncWait' Impersonate='no'/>
<InstallExecuteSequence>
<Custom Action='SilentAction' Before='InstallFinalize'/>
</InstallExecuteSequence>
</Product>
</Wix>
Silent.exe是我编写的golang代码,有许多函数,我编写的代码部分默默安装包如下。
package main
import (
"fmt"
"os/exec"
)
func main() {
/*........................
...........................
..........................*/
/*The code above is for my Different purpose */
co := exec.Command("C:\\Windows2008R2.exe","/q","/c:\"msiexec","/i","Windows2008R2.msi","/qn","/l*v","C:\\Windows2008R2_x64.log\"")
if err := co.Run(); err != nil {
fmt.Println("Error: ", err)
}
}
答案 0 :(得分:1)
Windows不允许您在安装其他应用程序时安装应用程序。更好的是,您可以为该可再发行组件包安装MSI,并在通过wmic remote命令完成上一次安装后单独调用它。