如何使用
前置操作
- 替换所有的
XFEstudio为您的主体,其可以是您个人也可以是公司名称 - 替换所有的
XFE工具箱为软件的显示名称 - 替换所有的
XFEToolBox为软件的exe可执行文件名称 - 将安装包图标放置在
Resources\Icon目录下,命名为Icon.ico - 将软件本体图标放置在
Resources\Icon目录下,命名为Icon.png
将软件压缩包放入安装器
- 发布 XFEToolBox 客户端,将客户端的程序和依赖文件压缩为
Source.zip,放入Resources\Resource目录。压缩包根目录应直接包含XFEToolBox.exe,不要增加二级目录。 Source.zip不需要包含Installer.exe。安装器会自动将当前运行的单文件安装器复制到安装目录,统一命名为Installer.exe,供客户端后续在线升级使用。下载后的安装器即使被重命名,也会使用这个固定名称。- 安装器副本和软件文件共用备份、替换及回滚流程;复制失败不会被当作安装成功。兼容旧安装包:如果包内已经显式提供了
Installer.exe,则优先使用包内版本。
在线升级协议
- 客户端通过
XFEExtension.NetCore.UpgradeHelper请求http://upgrade.api.xfe.studio/upgrade,升级服务中的应用名固定为XFEToolBox - 检测到新版本并经用户确认后,客户端以管理员权限调用同目录的
Installer.exe - 调用参数依次为:
Upgrade、升级压缩包的 HTTP/HTTPS 地址、当前 XFEToolBox 安装目录 - 等价命令:
Installer.exe Upgrade <downloadUrl> <installDirectory> - Installer 会将压缩包下载为安装目录下的
InstallPackage.zip,解压覆盖完成后删除临时压缩包,并启动XFEToolBox.exe - 发布升级包时不要增加二级目录;压缩包根目录应直接包含
XFEToolBox.exe及其依赖文件,也无需包含Installer.exe - 在线升级包不要覆盖正在运行的
Installer.exe;Installer 自身需要更新时,应在后续安装包发布流程中单独替换
推荐发布流程
以自包含方式发布 XFEToolBox 客户端(如
dotnet publish XFEToolBox/XFEToolBox.Client.csproj -c Release -r win-x64 --self-contained true),仅将软件文件压缩为Source.zip,打包时排除旧的Installer.exe和临时InstallPackage.zip。工具编译所需的私有组件会在首次使用时自动下载,不要把用户目录中的Toolchains缓存放入安装包。将
Source.zip放入XFEToolBox.Client.Installer/Resources/Resource,然后发布安装器:dotnet publish XFEToolBox.Client.Installer/XFEToolBox.Client.Installer.csproj -c Release -p:PublishProfile=FolderProfile分发生成的单文件
Installer.exe。安装后,软件目录会自动得到一份同样的安装器,保留后续在线升级能力,无需预先再打包一份升级器。
FolderProfile 使用 Windows x64、自包含、单文件发布,以保证复制的 Installer.exe 可以独立运行。自动复制会保留安装器本身的内置安装包,但 Source.zip 不再嵌套第二份安装器。
可用 -p:InstallationPackagePath=<Source.zip 的绝对路径> 指定其他安装包,资源名称保持不变。只需要单独分发不含离线安装包的升级器时,仍可使用 -p:EmbedInstallationPackage=false。
安装时若目标目录中的 XFEToolBox.exe 仍在运行,Installer 会先尝试正常关闭,超时后仅终止路径完全匹配的目标进程;不会按进程名结束其他目录中的同名程序。升级包中若包含正在运行的 Installer 本身,该文件会被跳过,其余应用文件继续安装。
在线升级会等待下载任务结束并关闭所有安装包文件流后,再进入安装页面;下载进度达到 100% 本身不会触发安装。暂停后恢复也会等待上一轮下载释放文件,避免多个下载任务同时写入安装包。
安装包读取、解压、文件属性修改、备份、替换及回滚遇到 Windows 临时共享冲突、锁冲突或拒绝访问时,会自动等待并重试,每个操作最多等待 10 秒。持续占用仍会报告具体失败文件并尝试回滚;无效压缩包、磁盘空间不足等错误不会按文件占用重复尝试。升级成功后,临时安装包清理失败不会把已经完成的升级误报为安装失败。
安装器回归测试(包含自动添加升级器、同目录升级、安装回滚、真实文件锁以及下载完成、暂停恢复和页面卸载的时序测试):
dotnet run --project XFEToolBox.Client.Wpf.Test/XFEToolBox.Client.Wpf.Test.csproj -c Release -p:EmbedInstallationPackage=false -- --tests --filter Installer --no-parallel --report none