Windows Sandbox 的其它用法——配置文件快速部署不可信软件使用

你们有什么 Windows Sandbox 的奇怪用法,我看到有人拿 Windows Sandbox 来当作编程环境。
以下是我的用法,如果你们有快速部署其它软件的静默安装参数也可以发出来讨论。

下文分享于 LetITFly BBS
https://bbs.letitfly.me/d/1149

原文详情

QQ 和微信最近爆出的隐私问题让大家比较想要进行虚拟机隔离开不可信的软件,但有些人听到虚拟机就会觉得非常麻烦,Windows 自带的(Pro 及以上) sandbox 其实就是一个非常简单的虚拟机,可以来部署一些软件日常使用。

配置文件

我们要使用配置文件进行快速部署一个软件,微软 docs 给了我们一个示例:

VSCode.wsb
<Configuration>
  <MappedFolders>
    <MappedFolder>
      <HostFolder>C:\SandboxScripts</HostFolder>
      <ReadOnly>true</ReadOnly>
    </MappedFolder>
    <MappedFolder>
      <HostFolder>C:\CodingProjects</HostFolder>
      <ReadOnly>false</ReadOnly>
    </MappedFolder>
  </MappedFolders>
  <LogonCommand>
    <Command>C:\Users\WDAGUtilityAccount\Desktop\SandboxScripts\VSCodeInstall.cmd</Command>
  </LogonCommand>
</Configuration>

<MappedFolders> 让 sandbox 可以映射主机的文件夹,不用担心 sandbox 一关文件就全丢了。

<LogonCommand> 让我们可以快速的部署和打开我们想要运行的软件,虽然目前只能写一条命令,但可以通过 cmd 脚本或者 powershell 脚本来执行复杂的操作。

MappedFolders

MappedFolders Example
<MappedFolders>
  <MappedFolder> 
    <HostFolder>absolute path to the host folder</HostFolder> 
    <SandboxFolder>absolute path to the sandbox folder</SandboxFolder> 
    <ReadOnly>value</ReadOnly> 
  </MappedFolder>
  <MappedFolder>  
    ...
  </MappedFolder>
</MappedFolders>

<HostFolder> 是主机上的文件夹,主机上必须有这个文件夹,否则 sandbox 会启动失败。

<SandboxFolder> 是 sandbox 里映射的文件夹,如果没有指定就会在桌面映射文件夹。

在 windows 2004 之前这个属性无效,并且会在桌面建立一个以该文件夹命名的映射文件夹。如果是用户的下载文件夹或者文档文件夹等特殊文件夹则会被命名为 username Download/Document

<ReadOnly> 是指 sandbox 里共享的这个文件夹是否只读,如果是 ture 就会只读,默认是 false

映射文件夹可能会造成 sandbox 内的程序将文件夹损坏或者潜在的影响主机文件或系统

快速部署

网络下载

没错,windows 有 curl,直接用就行,但是 powershell 里的 curl 是 Invoke-WebRequest

网络下载

cmd

curl -L "[download link]" --output [download name]

powershell

$wc = New-Object net.webclient
$wc.Downloadfile($video_url, $local_video_url)

或者

$ProgressPreference = 'SilentlyContinue'
Invoke-WebRequest <params>

因为老版本的 powershell 有 bug,Invoke-WebRequest 的速度会被进度条影响。

Progress bar can significantly impact cmdlet performance

解压

没错,windows 有 tar,直接用就行,并且 cmd 和 powershell 都能直接用。

不要想不开用 Expand-Archive

tar and curl come to windows

静默安装

微软 docs 给了我们一个示例:

VSCodeInstall.cmd
REM Download Visual Studio Code
curl -L "https://update.code.visualstudio.com/latest/win32-x64-user/stable" --output C:\users\WDAGUtilityAccount\Desktop\vscode.exe

REM Install and run Visual Studio Code
C:\users\WDAGUtilityAccount\Desktop\vscode.exe /verysilent /suppressmsgboxes

vscode 网页上给出了静默安装的参数,可是大部分软件没有给静默安装的参数。

大部分软件静默安装只需要加上 /s -s 或者 /q,不过有些软件不太一样,可以通过以下的网页来寻找。

提到一些软件静默安装参数的网页

Windows 常用软件的静默安装参数

软件静默安装参数 实际上说的是 nsis, msi, InstallShield, Inno, WISE Installer,可以自己去找到这些安装器的 docs

许多程序安装包可能没有安装后自动打开的功能,可以用 cmd 的 start /wait 或者 powershell 的 Start-Process -wait -ArgumentList "[slient install argument]" 等待安装包安装完成后再执行来实现。

cmd 和 PowerShell 的 start 命令

cmd start Commands

PowerShell Start-Process Commands

powershell 脚本运行软件要加上 & 或者使用 Start-Process(对 linux 玩家极度不友好)。

Rail Mode

Rail Mode 指的是类似于 Remote App 的模式,这个模式下程序就像是在本地计算机上运行。

Rail Mode 演示

Rail Mode 演示

但是 docs 中并没有写如何使用。

工具

如果你觉得比较麻烦还可以使用别人做的 sandbox 工具,Windows Sandbox Editor 是生成 sandbox 配置的 GUI 工具,Run in Sandbox Context Menu 可以在右键菜单里加入 在 sandbox 中运行

微软官方做的 sandbox 工具整理页面

Windows Sandbox Editor 演示

Windows Sandbox Editor

Run in Sandbox Context Menu 演示

Run in Sandbox Context Menu

下载 QQ 部署到 Windows Sandbox

首先提取 QQ 的下载链接,找到 QQ 的静默安装参数,如果有运行库需求的需要下载运行库静默安装。把 QQ 的聊天记录数据库映射到主机,下次打开的时候就不用重新输入账号了,消息记录也不丢失。找到默认安装 QQ 的文件位置,在脚本中写上打开 QQ 的命令,就可以得到一个只需要双击这个文件就可以运行在 sandbox 中的 QQ(需要网络)

实现视频

我的配置文件
QQps1.wsb
<Configuration>
  <VGpu>Disable</VGpu>
  <Networking>Enable</Networking>
  <AudioInput>Disable</AudioInput>
  <VideoInput>Disable</VideoInput>
  <ProtectedClient>Enable</ProtectedClient>
  <PrinterRedirection>Disable</PrinterRedirection>
  <ClipboardRedirection>Disable</ClipboardRedirection>
  <MappedFolders>
    <MappedFolder>
      <HostFolder>C:\Users\Public\Downloads\QQ</HostFolder>
      <SandboxFolder>C:\Users\WDAGUtilityAccount\Desktop\SandboxScripts</SandboxFolder>
      <ReadOnly>true</ReadOnly>
    </MappedFolder>
    <MappedFolder>
      <HostFolder>C:\Users\Public\Downloads\SandboxFlie\QQfile</HostFolder>
      <SandboxFolder>C:\Users\WDAGUtilityAccount\Documents\Tencent Files</SandboxFolder>
      <ReadOnly>false</ReadOnly>
    </MappedFolder>
  </MappedFolders>
  <LogonCommand>
    <Command>C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -sta -WindowStyle Hidden -noprofile -executionpolicy unrestricted -file "C:\Users\WDAGUtilityAccount\Desktop\SandboxScripts\qqinstallpre.ps1"</Command>
  </LogonCommand>
</Configuration>
qqinstallpre.ps
# 防止手滑
copy C:\Users\WDAGUtilityAccount\Desktop\SandboxScripts\qqinstallps1.txt C:\Users\WDAGUtilityAccount\Desktop\qqinstall.ps1
C:\Users\WDAGUtilityAccount\Desktop\qqinstall.ps1
qqinstallps1.txt
# Download QQ
$down = New-Object net.webclient
$down.Downloadfile("https://down.qq.com/qqweb/PCQQ/PCQQ_EXE/PCQQ2020.exe", "C:\users\WDAGUtilityAccount\Desktop\QQ.exe")

# Install QQ
Start-Process -wait C:\users\WDAGUtilityAccount\Desktop\QQ.exe -ArgumentList "-s"

# Run QQ
& "C:\Program Files (x86)\tencent\QQ\Bin\QQSclauncher.exe"

如果你很懒,可以下载我的配置文件:

qqwindowssandbox

dreamcaseqqsandbox

如果你运行的程序一点数据丢失都不能允许的话,建议你还是去用普通的虚拟机吧。

相关链接

Windows Sandbox configuration
powershell Expand-Archive
Why is Using Invoke-WebRequest Much Slower Than a Browser Download

根据 CC-BY-NC 4.0 共享

2 Likes

家庭版想要尝试一下,但是没有成功

原来是想当sandboxie 用,装一些不想装又不得不装的软件的,结果发现不合适

windows sandbox 运行是不是很费资源?比如qq要一直挂着,那么sandbox不得一直开着.风扇会呼呼呼的响,电表会嗖嗖嗖的转哟

然后做了个虚拟机里面跑 flash 的配置文件。