在WiX源文件中静默安装应用程序

时间:2015-11-18 06:10:09

标签: wix windows-server-2008 silent-installer

我想安装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)
    }  
}

1 个答案:

答案 0 :(得分:1)

Windows不允许您在安装其他应用程序时安装应用程序。更好的是,您可以为该可再发行组件包安装MSI,并在通过wmic remote命令完成上一次安装后单独调用它。