go项目中如何启动windows应用安装包(msi,exe格式)安装软件
我总结出有两种方法可以做到让windows自安装应用程序
1:使用cmd命令来做
Cmd命令需要区分安装exe和msi软件,命令不同,命令参数请参考
https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/msiexec
代码如下
其中注释掉的
cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
是不让弹出窗口,入参是安装包全路径
这种方法有个问题,就是如果是在完整的项目中,一旦安装出错或者客户取消安装软件,就会杀死整个项目的进程,项目停止。我没有尝试找到如何停止单个安装软件进程的方法,猜测可能可以用context来做,我没试过,如果有同学实验可以,可以私聊下我,感谢。
2:采用CreateProcess方法来创建新的进程(推荐)
在Go中,syscall包会由于你指定的系统或架构的不同而编译出不同的结果,因为syscall包里需要编译的函数或类型会根据你指定的编译参数不同而不同。大家可以去看下syscall包源码
代码如下
CreateProcess方法即使客户取消安装也不会终止当前项目进程,较为简单。推荐
还有一些同学不想弹出cmd框,可以在编译的时候go build -ldflags="-H windowsgui"方式