核心思路

以[其他用户身份]运行特定app

步骤

安装程序

下载安装程序至一个所有人都可以访问的位置,例如公共“下载”文件夹(默认位置是 C:\Users\Public\Downloads)。
我的存放路径是 D:\Downloads\aiduNetdisk_6.8.9.1.exe

建立隔离账户

netplwiz 以管理员身份运行,并新建一个本地账户
我的设置是 用户名 temp ,密码temp

在隔离账户内安装软件

首先转到刚刚保存安装程序的位置,然后在文件资源管理器里点 File > Open PowerShell,再在里面运行

  1. # 本powershell记为“常用账户shell"
  2. # 在弹出的对话框里输入刚建立的用户的用户名和密码,均为temp
  3. $cred = Get-Credential
  4. # 用新用户(temp)的身份启动 PowerShell
  5. Start-Process powershell -ArgumentList '-Command Start-Process powershell' -Credential $cred -LoadUserProfile

注意立刻启动的 PowerShell 并不是我们需要的,它会“多余地”再启动一次 PowerShell,因此在蓝色窗口闪过之后再出现的蓝色窗口才是我们需要的。在新启动的 PowerShell 里运行如下命令

# 本powershell记为“temp账户shell”
# 不要尝试提权。默认情况下,百度网盘无法不提权运行我们需要通过环境变量控制兼容性设置,从而让 Windows 忽略一切判定直接以 temp 受限用户的身份运行安装程序。
$env:__COMPAT_LAYER = 'RunAsInvoker'

# 下面一行取决于安装程序的名字
.\BaiduNetdisk_6.8.9.1.exe

正常安装并启动百度网盘,做以下设置

登录百度云管家,并允许记住密码和自动登录。
修改默认下载路径为公共“下载”文件夹。或D:\Downloads
关闭客户端锁定的功能。
关闭“插入设备后,提示备份照片”功能。

如果你直接关掉了百度云管家,则直接看下一步,完成后即可启动百度云管家并进行日常操作。

准备启动器

每次启动百度云管家的时候都必须以 temp 隔离账户的身份启动,为了免去输入密码等麻烦,可以准备一个脚本完成百度盘的启动。
常用账户下启动ise,Ctrl+N,并粘贴如下代码,保存该脚本。假设路径为D:\Program\Start-BaiduNetdisk.ps1

# password应该是一长串十六进制数,来源见下文
$password = '01000000d08c9ddf0115d1118c7a00c04fc297eb010000007d15504d42822f438902e4b1b75c201100000000020000000000106600000001000020000000e86874befa890200bd078fe2f9c18d6e12f7947acd6d512fb716e0d9b42e3eb5000000000e8000000002000020000000a1fbebf4e03df57bf009f564acd3bfd8663c53b7a7fde2db295e5ca62e664a301000000083cf468df8fd4514707bab3e305c3e72400000003944b0c9f382f2ec7fe989e56aacd346f741b8e07257d72b67d6470f6c227cc6745b87a1aa82ebc8aaf57a8181a00957c798e354d9f1e672b6be7305a0db18c9'
$cred = [pscredential]::new('temp', ($password | ConvertTo-SecureString))

# 不同软件这里的命令不同
# 这里是用 Invoke-Item 打开百度网盘的快捷方式
Start-Process powershell -ArgumentList '-Command Invoke-Item ~\Desktop\百度网盘.lnk' -WorkingDirectory 'C:\' -Credential $cred -LoadUserProfile -WindowStyle Hidden

另外启动一个常用账户powershell终端

# 在弹出的对话框里输入刚建立的用户的用户名和密码 temp
$cred = Get-Credential

# 安全地保存密码并复制到剪贴板,即可获得上文的password十六进制数
$cred.Password | ConvertFrom-SecureString | Set-Clipboard

为了确保操作正确,可以进行测试:退出百度云管家,再在 ISE 里按 F5,如果什么都没有提示就直接启动了百度云管家,则说明代码正确。
在喜欢的地方新建快捷方式,目标写:

powershell -ExecutionPolicy Unrestricted -File "D:\Program\Start-BaiduNetdisk.ps1"

建立好之后右键,选 Properties,在 Run 下拉列表里选 Minimized(以最小化窗口启动快捷方式)

隐藏隔离账户

不希望在欢迎屏幕看到这个隔离账户,可以通过编辑注册表regedit把它隐藏
定位到 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList 键(如果没有则需要创建)。
在右侧右键,新建 DWORD 值,并起名为 temp。
重启

参考文献

在 Windows 上隔离 app:以百度云管家为例 2020 年 1 月 15 日 | 罗辑