使用Wix简单制作了个安装包

之前看了好几个打包软件 advanceinstaller installshield什么的, 发现大都是收费的, 看的Wix还是sourceforget上停更的版本, 以为没戏, 没想到在github偶尔看到了WixToolSet,原来还有更新, 还有VS2019的插件,赶紧下了一个用用.终于把我的dotnetcore网站打包成msi了.

下面就是wix的封装脚本.wxs文件. 要安装的东西用一个Component元素表示, 因为是网页, 引用项目的话也拿不到他的发布路径(publishurl),所以我这里就都做成rar包了, 安装过程就是把Rar包放到客户电脑上,再通过CustomAction执行bat脚本, 脚本调用rar.exe进行文件解压. 然后使用nssm将core网站注册为windows服务,mysql数据库也是同理. 卸载前则需要执行脚本像将注册的网站和mysql服务删除掉,卸载的脚本需要等待完成才能执行文件删除,所以action里是 Return="ignore",执行bat不知道怎么返回成功,所以得用ignore, 如果用了check就会变成卸载事故,无法卸载了(别问我是怎么知道的)...

 安装程序的风格用的是 <UIRef Id="WixUI_InstallDir"/> 表示只有license声明和修改安装路径两大界面.

声明的文本在这句里<WixVariable Id="WixUILicenseRtf" Value="license.rtf" />

然后安装路径界面把路径传入一个属性Property里,这个元素的id要求是WIXUI_INSTALLDIR, 他的Value这是目录声明的Directory的id

<Property Id="WIXUI_INSTALLDIR" Value="INSTALLDIR" />

然后整个安装包只有msi没有cab文件靠的是这一句 <MediaTemplate EmbedCab="yes" />

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
	<Product Id="CF9E5738-6F16-471E-8937-367ACA75D5E0" Name="AIWebSetup" Language="2052" Codepage="936" Version="1.0.0.1" Manufacturer="HrstAi" UpgradeCode="cdf0d953-c5f0-4b27-8ea3-4da1fab43252">
		<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
		<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
		<MediaTemplate EmbedCab="yes" />
		<Feature Id="ProductFeature" Title="AIWebSetup" Level="1">
		    <ComponentRef Id="serviceAction"  />
		</Feature>
		<WixVariable Id="WixUILicenseRtf" Value="license.rtf" />
		<Property Id="WIXUI_INSTALLDIR" Value="INSTALLDIR" />
		<UIRef Id="WixUI_InstallDir"/>
		<CustomAction Id='LaunchFile1' Impersonate="no" ExeCommand="[SystemFolder]cmd.exe /k initiate.bat" Directory="INSTALLDIR" Return="asyncWait"/>
		<CustomAction Id='LaunchFile2' Impersonate="no" ExeCommand="[SystemFolder]cmd.exe /k uninstall.bat"  Directory="INSTALLDIR" Return="ignore"/>
		<InstallExecuteSequence>
		<Custom Action='LaunchFile2' Before="RemoveFiles">
			(REMOVE~="ALL") AND (NOT UPGRADINGPRODUCTCODE)
		</Custom>
		<Custom Action='LaunchFile1' After='InstallFinalize'>NOT Installed</Custom>
		
		</InstallExecuteSequence>
	</Product>

	<Fragment>
		<Directory Id="TARGETDIR" Name="SourceDir">
			<Directory Id="ProgramFilesFolder">
				<Directory Id="INSTALLDIR" Name="AIDetect" >
					<Directory Id="website" Name="website" />
					<Directory Id="mysql" Name="aimysql" />
				</Directory>
			</Directory>
		</Directory>
	
		<DirectoryRef Id="INSTALLDIR">
		  <Component Id="serviceAction" Guid="8965BDD3-FA71-4E5D-9C67-75A4B87920B0" Win64="no">
			  <File Id="nssm.exe"  Source="content/nssm.exe" />
			  <File Id="sed.exe"  Source="content/sed.exe" />
			  <File Id="mysql57.rar"  Source="mysql/mysql57x64.rar" />
			  <File Id="website.rar"  Source="website/website.rar" />
		      <File Id="rar.exe"  Source="content/rar.exe" />
			  <File Id="initiate.bat"  Source="content/initiate.bat" />
			  <File Id="uninstall.bat"  Source="content/uninstall.bat" />
		  </Component>
	   </DirectoryRef>
	</Fragment>
</Wix>

mysql压缩包解压后 调用 mysqld install 就能注册服务并启动, 调用mysqld remove 则把服务删除,非常方便.可以把自己的空数据和改好的数据库密码先弄好再打成压缩包, 就不用执行初始化sql脚本了.

nssm注册服务则需要找到 客户的dotnetcore安装路径(在cmd 输入 where dotnet 就能获取到了(可能有32和64两个位置)).

安装bat如下

@echo off
set curpath=%~dp0
for /F "tokens=*" %%i in ('where dotnet ') do ( 
    set exepath=%%i
    echo %exepath% | findstr "x86" && echo yes || goto rar
)
goto end

:rar
echo It is extracting files now, please wait...
"%curpath%rar" x -y -inul "%curpath%mysql57x64.rar" "%curpath%aimysql\"
del /q/f "%curpath%mysql57x64.rar"
"%curpath%rar" x -y -inul "%curpath%website.rar" "%curpath%website\"
del /q/f "%curpath%website.rar"
goto sqlcheck

:sqlcheck
set port=13360
netstat -ano|findstr :%port%
if ERRORLEVEL 1 (goto sqlok) else (goto sqlerr)

:sqlok
"%curpath%aimysql\bin\mysqld" install aidmysql --port=%port%
net start aidmysql
goto web

:sqlerr
echo please input your mysql password
set /p sqlpwd=
"%curpath%aimysql\bin\mysql" -uroot -p%sqlpwd% <"%~dp0website\dbscript\create_table.sql"
"%curpath%aimysql\bin\mysql" -uroot -p%sqlpwd% <"%~dp0website\dbscript\init_data.sql" --default-character-set utf8
if ERRORLEVEL 1 (goto end) else (goto pwdChange)

:pwdChange
sed -i s/pwd=Asdf1234;/pwd=%sqlpwd%;/g "%~dp0website\appsettings.json"
goto web

:web
set webport=11000
netstat -ano|findstr :%webport%
if ERRORLEVEL 1 (goto webservice) else (goto weberr)

:weberr
echo please input your website port
set /p webport=
netstat -ano|findstr :%webport%
if ERRORLEVEL 1 (goto webport) else (goto weberr)

:webport
sed -i s/http:\/\/\*:11000/http:\/\/\*:%webport%/g "%~dp0website\appsettings.json"
goto webservice

:webservice
"%curpath%nssm" install aidweb "%exepath%"
"%curpath%nssm" set aidweb AppDirectory "%~dp0website"
"%curpath%nssm" set aidweb AppParameters Hrst.AIDetect.PCWeb.dll
"%curpath%nssm" start aidweb
goto firewall

:firewall
netsh advfirewall firewall add rule name="aidfw" dir=in program="%exepath%" action=allow
echo the website url is http://localhost:%webport%
goto end

:end
echo install sucess

在网上找到了关于Wix 的书 <<wix cookbook>>

 网盘 https://pan.baidu.com/s/1-ibGJHtq0CPfYyKlCjqCHg 

提取码 egmx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值