记录 WixV3 打包WPF应用的过程,制作一个简单的Msi格式安装包

目录

一、下载并安装 Wix Toolset

二、安装Visual Studio 扩展

 三、准备一个待打包的项目

四、新建一个Setup项目

五、添加引用待打包的项目

六、修改 Product.wxs 配置信息

 七、生成安装包并安装应用


一、下载并安装 Wix Toolset

        WiX v3 | WiX Toolset

安装完是这样子的

二、安装Visual Studio 扩展

 

 三、准备一个待打包的项目

        这里新建一个WPF项目

        在Visual Studio中的项目结构如下

        

        在硬盘内的文件结构如下,这里是生成后的Debug文件夹内文件,为了更让人易懂,这里新建一个文件夹当作项目的一些其他资源

 

 core文件夹内容如下

四、新建一个Setup项目

这里直接新建在本示例项目解决方案一起

 这里有一个是打包成exe的一个是打包msi的,本教程选择打包成 msi 格式

新建完成后Setup项目结构如下

五、添加引用待打包的项目

右键Setup项目的 References -> 添加引用 ->选择《项目》->添加待打包的项目

添加完成后的项目结构如下,这里添加好像只是添加了单个 .exe可执行文件,这里并没有过多去探索。如果不添加项目引用的话也可以在后面通过修改Product.wxs文件来添加

六、修改 Product.wxs 配置信息

配置信息可以简单理解为三部分

1、

<Product> 记录项目信息,打包清单、配置安装过程中的UI节目、环境检查等

2、

<!--片段1-->
<Fragment>       定义安装输出文件夹路径

3、

<!--片段2-->
<Fragment>        配置项目文件,依赖、图片等等

以下是配置代码,只是在我的理解范围内的解释

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
	<!--Name="DogDemo"	控制面板里程序里的名称-->
	<!--Manufacturer="Dogzi"	控制面板程序里的发布者-->
	<Product Id="*" Name="DogDemo" Language="1033" Version="1.0.0.0" Manufacturer="Dogzi" UpgradeCode="11f80bba-d56d-4921-82dd-4bc58ec734f2">
		<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

		<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
		<MediaTemplate />

		<!--Feature 记录Setup打包项目的清单-->
		<Feature Id="ProductFeature" Title="SetupProject2" Level="1">
			<ComponentGroupRef Id="ProductComponents" />
		</Feature>
	</Product>
	<!--片段1 定义安装后输出到哪些文件夹-->
	<Fragment>
		<!--文件夹路径一 C:\Program Files (x86)\AAAAA-->
		<Directory Id="TARGETDIR" Name="SourceDir">
			<Directory Id="ProgramFilesFolder">
				<Directory Id="INSTALLFOLDER" Name="AAAAA" />
			</Directory>
		</Directory>
	</Fragment>
	<!--片段2-->
	<Fragment>
		<ComponentGroup Id="ProductComponents"
						Directory="INSTALLFOLDER">
			<Component Id="ProductComponent">
				<!--引用中的项目名称 DemoApp 对应右键References时添加的项目名称-->
				<File Source="$(var.DemoApp.TargetPath)" />

				<!--如果没有在Referernces中引用,则可以使用绝对路径的方式-->
				<!--<File Id="DemoApp.exe" Source="F:\WPF\DemoInstall\DemoApp\bin\Debug\DemoApp.exe"/>-->

			</Component>
			<ComponentRef Id="Libs"/>
			<ComponentRef Id="coreDir"/>
		</ComponentGroup>

		<!--这里可以理解为:将DirectoryRef标签下面的文件放在Id="INSTALLFOLDER"的文件夹内,INSTALLFOLDER 则是片段1中定义的安装目录-->
		<DirectoryRef Id="INSTALLFOLDER">
			<Component Id="Libs">
				<File Id="Newtonsoft.Json.dll"
					  Source="F:\WPF\DemoInstall\DemoApp\bin\Debug\Newtonsoft.Json.dll"/>
			</Component>
			<Directory Id="core"
					   Name="core">
				<Component Id="coreDir">
					<File Id="abc.txt"
						  Source="F:\WPF\DemoInstall\DemoApp\bin\Debug\core\abc.txt" />
				</Component>
			</Directory>
		</DirectoryRef>
	</Fragment>
</Wix>

 连线的方式理解配置与文件对应关系

 

 七、生成安装包并安装应用

 

 当双击SetupProject2.msi 文件,安装过程会一闪而过,因为此配置文件中没有配置任何提示UI等。

安装后在控制面板和文件夹内的的样子

 

参考资料:

工具下载:WiX v3 | WiX Toolset

官方Git:wixtoolset/wix3: WiX Toolset v3.x (github.com)

博客资料:WiX Toolset 安装包制作入门教程(目录篇) - walterlv

                 https://blog.csdn.net/qq_35159235/article/details/118992308

                 https://blog.csdn.net/catshitone/article/details/77802365

                https://blog.csdn.net/qq_35159235/article/details/119005674

          

        

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要实现WPF项目生成的MSI安装包的客户端远程自动更新,可以按照以下步骤进行操作: 1. 创建一个用于更新的服务器:在服务器上搭建一个用于存放更新文件的位置,可以使用FTP、HTTP或者自建的Web服务器。 2. 在WPF应用程序中集成自动更新功能:在WPF应用程序中添加自动更新的代码逻辑。可以使用开源的自动更新库,如Squirrel或ClickOnce。 3. 编写更新逻辑:编写代码逻辑来检查服务器上是否有新版本的应用程序可用,以及如何下载并安装更新。 4. 版本管理:为每个应用程序版本分配唯一的版本号,并将其与更新文件关联起来。确保在每个新版本发布时,更新文件都能正确地上传到服务器上。 5. 检查更新:在应用程序启动时,检查服务器上是否有新版本可用。可以使用定期轮询或者推送通知来触发这个检查。 6. 下载和安装更新:如果检测到新版本,应用程序会下载更新文件,并在后台进行安装。这一过程可以使用自动更新库来简化。 7. 错误处理和回滚:在更新过程中,处理可能发生的错误,并确保能够回滚到之前的应用程序版本。 8. 用户体验:确保更新过程对用户来说是无缝、友好和可靠的。提供更新进度的反馈,以及必要的确认和提示。 需要注意的是,远程自动更新涉及到网络通信和文件传输,因此需要确保服务器稳定可靠,并考虑到网络连接不稳定的情况下的异常处理。此外,还需遵守软件许可协议和相关法律法规,确保在合法的前提下进行更新操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值