You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何追踪WPF应用的卸载操作及卸载发起用户?

实现NSIS卸载WPF应用的追踪及用户身份识别

核心思路

利用NSIS的卸载脚本扩展能力,在卸载流程最前端插入自定义追踪逻辑,同时获取当前执行卸载操作的用户信息,再调用你的API上报数据。

具体实现步骤

1. 修改NSIS卸载脚本,添加追踪逻辑

无论你用NSIS快速生成器还是手动编写脚本,都可以在卸载初始化阶段加入以下代码,先获取关键信息再调用追踪API:

示例NSIS代码:

; 卸载初始化函数,卸载启动时自动执行
Function un.onInit
    ; 获取当前登录用户名
    StrCpy $User ""
    GetUserName $User

    ; 获取设备名称
    StrCpy $Machine ""
    GetComputerName $Machine

    ; 获取卸载时间(格式:YYYY-MM-DD HH:MM:SS)
    StrCpy $UninstallTime ""
    GetDateTime $UninstallTime "%Y-%m-%d %H:%M:%S"

    ; 调用追踪逻辑:两种可选方式
    ; 方式1:用curl直接调用API(需提前把curl打包到安装目录)
    nsExec::Exec '"$INSTDIR\curl.exe" -X POST "https://your-tracking-api.com/report" -d "action=uninstall&user=$User&machine=$Machine&time=$UninstallTime"'

    ; 方式2:调用WPF应用的命令行模式(需在应用中添加参数处理逻辑,快速执行后退出)
    ; nsExec::Exec '"$INSTDIR\YourWpfApp.exe" --track-uninstall --user="$User" --machine="$Machine" --time="$UninstallTime"'
FunctionEnd

2. 适配WPF单文件应用的特殊情况

由于你的WPF应用是单文件自解压发布,卸载时安装目录文件会被逐步删除,需注意:

  • 把追踪依赖工具(如curl、迷你追踪程序)单独放在安装目录,且在卸载脚本中先执行追踪逻辑,再启动文件删除流程
  • 如果让WPF应用处理追踪命令,要确保应用能快速启动、处理参数后立即退出,不要加载完整WPF界面,避免拖慢卸载速度

3. 获取更精准的用户身份信息

如果需要域用户或完整用户标识,可使用NSIS的UserInfo插件扩展:

; 加载UserInfo插件
!include "UserInfo.nsh"

Function un.onInit
    ; 获取完整用户标识(域\用户名)
    UserInfo::GetName $FullUser
    Pop $FullUser

    ; 上报时使用$FullUser作为用户标识
    nsExec::Exec '"$INSTDIR\curl.exe" -X POST "https://your-tracking-api.com/report" -d "action=uninstall&fulluser=$FullUser&machine=$Machine&time=$UninstallTime"'
FunctionEnd

4. 避免阻塞卸载流程

如果API调用可能耗时,建议用异步方式执行,让追踪逻辑在后台运行,不影响卸载:

ExecShell "" '"$INSTDIR\curl.exe" -X POST "https://your-tracking-api.com/report" -d "..."'

注意事项

  • 确保追踪工具和NSIS脚本的权限匹配:若应用以管理员权限安装,卸载时也会以管理员权限运行,API调用需处理好权限问题
  • 追踪逻辑中不要弹出任何UI窗口,避免干扰用户卸载操作
  • 测试覆盖所有场景:普通用户卸载、管理员卸载、控制面板卸载、桌面图标卸载,确保所有场景下追踪逻辑都能触发

内容的提问来源于stack exchange,提问作者May Nguyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 10:41:27