如何下载或编译得到便携版 winget?

Winget 是 Windows 官方提供的包管理工具,在 Win11 和新版 Win10 中提供,仅有命令行版本。

但是这个工具是预装在系统中的,官方未提供便携版的可执行文件下载,也就没法把 winget 复制到其它电脑中使用,更无法内嵌在自己的软件中分发。官方提供的唯一安装方式是 UWP 安装包 Microsoft.DesktopAppInstaller.msixbundle

强行复制系统中的 winget.exe 所在文件夹到其它电脑也无法正常使用。

目前发现 UnigetUI 的安装目录中有 winget-cli 文件夹,复制出来可以作为便携版的 winget 正常使用。但是一直依赖 UnigetUI 也不是好办法。

所以想问问网友,是否知道什么渠道能下载到便携版的 winget,或者怎么自行编译得到 winget 可执行文件?

为啥用便携版?你的系统没有预装?

我有两个使用场景需要便携版:

  1. 放在 U 盘中,插在别人的电脑上运行(我是公司 IT 人员),快速安装软件;
  2. 随自己开发的脚本分发,作为依赖项的一部分。

这两个场景都是便携版更好,安装到用户电脑的话有种乱塞捆绑软件的嫌疑。如果用户的电脑是旧版 Win10 / LTSC / Server 的话,是没有预装 winget 的

那你应该将Microsoft.DesktopAppInstaller.msixbundle作为依赖项,自动安装DesktopAppInstaller,而不是使用独立的winget.exe吧?

安装 DesktopAppInstaller 也需要一两分钟的时间,能节约下来更好(目前用的是从 UniGetUI 里提取的 winget-cli,确实可用,说明技术上是能做到的)

另一个原因是个人不太喜欢往别人的电脑里装软件,有种往别人家墙上钉钉子的侵入感

并且winget.exe可能也对DesktopAppInstaller内的组件有依赖,你直接复制出来winget没法使用已经能说明问题了,实际负责安装的可能不是winget而是DesktopAppInstaller的一部分(我猜测),另外部分winget来源的软件可能对winget已在PATH中有假设。

另外一个问题是,你要使用非官方的自编译winget,还会有杀毒软件的问题,u盘内未数字签名的可执行程序请求管理员权限、访问网络下载二进制执行,这样做非常可能会被判定为病毒,不受控的环境下基本没法这么做(受控环境装个Microsoft.DesktopAppInstaller.msixbundle就是了)

比较神奇的是 UniGetUI 里的那个 winget-cli 是有微软签名的,说明这不是 UniGetUI 自己编译的,而是他们从某种渠道获取的 winget 便携版?

图片.png

如果一定要这么做,你可以试试根据unigetui的exe、dll列表从你的系统/microsoft store提取可执行文件,我看到的unigetui使用的winget-cli就是直接二进制塞到仓库里的,并没有什么CI之类的,这玩意是手动更新的(所以unigetui也默认用系统的winget)

感谢分享,我才知道他们也是直接粘贴二进制文件的

感谢各位分享,最后自己找到了个简单粗暴的办法:从官方的 Microsoft.DesktopAppInstaller.msixbundle 中直接提取现成的可执行文件。

  1. 下载 msixbundle 安装包:winget-cli - GitHub
  2. 后缀名改成 .zip,用压缩软件打开,解压其中的 AppInstaller_x64.msix
  3. msix 的后缀名改成 .zip,再次解压,就好了……这就是便携的 Winget……
  4. 删掉无关文件,只保留以下 winget 必要的文件:
    AppInstallerBackgroundTasks.dll
    concrt140_app.dll
    Microsoft.Management.Configuration.dll
    Microsoft.Web.WebView2.Core.dll
    msvcp140_1_app.dll
    msvcp140_2_app.dll
    msvcp140_app.dll
    resources.pri
    vcamp140_app.dll
    vccorlib140_app.dll
    vcomp140_app.dll
    vcruntime140_1_app.dll
    vcruntime140_app.dll
    WindowsPackageManager.dll
    WindowsPackageManagerServer.exe
    winget.exe
    
  5. 得到以上 Winget 便携程序
4 个赞

一个离谱的方法:U盘里备一个Xbox的安装包和一个便携版的BCUninstaller,安装好Xbox之后它会提醒你补充Microsoft Store和应用安装程序,应用安装程序就是winget。最后再用BCUninstaller把Xbox和Microsoft Store卸载就行了(手动滑稽)