包管理

安装路径

windows 默认的应用安装路径是由环境变量路径 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion 下的 ProgramFilesDir 这一变量来决定的,修改其值既可以修改程序的默认安装路径。

后经测试不建议修改,统一软件安装规范为直接修改安装路径
  1. 修改盘符 C 为目的安装的磁盘
  2. 并将其原有路径中的空格进行删除
  3. 例如 C:\Program Files\... 改为 D:\ProgramFiles\...

choco

默认安装位置通过以下几个环境变量进行指定,具体参考 Getting Started,可安装的包参考 Packages,会有具体教程

  1. 一些包会默认装在 ChocolateyInstall\lib 目录下;
  2. 其它一些基于 windows 下的安装包比如 MSI 会被安装在 C 盘下的 Program Files 文件夹里;
  3. 还有一些数据包会被装在 $env:ChocolateyBinRoot 目录下,如果这个环境变量不存在,包将会被创建在 c:\tools 目录下。
修改方法
  1. 对于第一种和第三种情况,我们进行设置对应的环境变量即可,即 ChocolateyInstallChocolateyBinRoot
  2. 而对于第二种情况,我们需要通过指令传递安装路径的,比如 choco install llvm -ia "'/D=D:\software\llvm'"
  3. 由于 choco 的一些需要的功能需要收费,且总体体验不能够高度的自主可控,转用 Scoop

winget

winget 是微软推出的一款旨在实现 windows 下的包管理的工具,但是其目前的包数量仍较少,且对代理的支持效果较差,国内用户体验感较差,一些基础的使用尝试如下:

  • winget settings 打开配置文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    {
    "$schema": "https://aka.ms/winget-settings.schema.json",
    "visual": {
    "progressBar": "rainbow"
    // 三种样式可选: accent(默认值), retro, rainbow
    },
    "logging": {
    "level": "verbose"
    }, // “verbose”, “info”, “warning”, “error”, “critical”
    "experimentalFeatures":{
    "experimentalMSStore": true
    },
    // For documentation on these settings, see: https://aka.ms/winget-settings
    // "source": {
    // "autoUpdateIntervalInMinutes": 5
    // },
    }

scoop

准备

在 powershell 中配置 scoop 代理的方式为 $env:scoop_proxy = "http://127.0.0.1:7890"(替换为自己的端口),清除 scoop 代理的方式为 $env:scoop_proxy= ""

安装

  1. 下载安装脚本irm get.scoop.sh -outfile 'install.ps1' 或者 curl -k -x 127.0.0.1:7890 https://raw.githubusercontent.com/scoopinstaller/install/master/install.ps1 -o install.ps1(国内用户 raw.githubusercontent.com 该域名可能被污染无法访问到真实的 ip 地址,可以通过 ipaddress.com 查找对应的 ip 并修改 hosts 文件即可)
  2. 允许脚本执行权限:管理员身份打开 powershell 输入 Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
  3. 执行所下载的脚本进行安装.\install.ps1 -RunAsAdmin -ScoopDir 'D:\Scoop' -ScoopGlobalDir 'D:\ProgramFiles' -NoProxy 或者 .\install.ps1 -RunAsAdmin -ScoopDir 'D:\Scoop' -ScoopGlobalDir 'D:\Scoop' -Proxy '127.0.0.1:7890'
  4. 执行 scoop checkup 检查 scoop 安装是否正常
    如果当前用户不是管理员的话,需去掉 -RunAsAdmin 选项

基础使用

  1. scoop bucket add main: 先添加基础的软件源仓库,这里仅展示 main 仓库的添加 extras,versions 类似
  2. scoop search [pkg]: 终端搜索想要安装的软件包,如果没有可以上 Scoop 去搜索,按照指示步骤添加对应的 bucket 即可
  3. scoop install [pkg]: 安装对应的软件包,有时候需要参照上方进行代理设置
  4. scoop remove [pkg]: 卸载对应软件包
  5. scoop status: 查找软件包更新 scoop_status.png
  6. scoop update: 更新 scoop 以及软件源
  7. scoop update [pkg]: 更新对应软件包
  8. scoop cache rm *: 清除缓存
  9. scoop cleanup *: 清理过时软件版本
  10. scoop bucket list: 列出当前使用的软件源/存储桶 scoop_bucket.png
  11. 导出软件源/存储桶
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    $SCOOP_DIR = 'D:\software\scoop'
    $buckets = (scoop bucket list)
    $knownBuckets = (scoop bucket known)
    Push-Location
    $output = $buckets | ForEach-Object {
    $outputBucket = $_.Name
    if ($_.Name -notin $knownBuckets) {
    Set-Location
    $outputBucket += ' ' + ($_.Source)
    }
    $outputBucket = 'scoop bucket add ' + $outputBucket
    $outputBucket
    }
    Pop-Location
    $apps = (scoop list)
    $output += 'scoop install ' + ($apps | ForEach-Object { $_.Name })

    $output | Out-File -FilePath 'install-scoop-softwares.ps1' -Encoding utf8
    Write-Output $output

更多使用方法可以查看 scoop help

问题

WARN Uncommitted changes detected. Update aborted

1
git -C "$(scoop prefix scoop)" reset --hard