你们有什么 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
的速度会被进度条影响。
解压
没错,windows 有 tar,直接用就行,并且 cmd 和 powershell 都能直接用。
不要想不开用 Expand-Archive
。
静默安装
微软 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
,不过有些软件不太一样,可以通过以下的网页来寻找。
提到一些软件静默安装参数的网页
软件静默安装参数 实际上说的是 nsis, msi, InstallShield, Inno, WISE Installer,可以自己去找到这些安装器的 docs
许多程序安装包可能没有安装后自动打开的功能,可以用 cmd 的 start /wait
或者 powershell 的 Start-Process -wait -ArgumentList "[slient install argument]"
等待安装包安装完成后再执行来实现。
powershell 脚本运行软件要加上 &
或者使用 Start-Process
(对 linux 玩家极度不友好)。
Rail Mode
Rail Mode 指的是类似于 Remote App 的模式,这个模式下程序就像是在本地计算机上运行。
但是 docs 中并没有写如何使用。
工具
如果你觉得比较麻烦还可以使用别人做的 sandbox 工具,Windows Sandbox Editor 是生成 sandbox 配置的 GUI 工具,Run in Sandbox Context Menu 可以在右键菜单里加入 在 sandbox 中运行
Windows Sandbox Editor 演示
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"
如果你很懒,可以下载我的配置文件:
如果你运行的程序一点数据丢失都不能允许的话,建议你还是去用普通的虚拟机吧。
相关链接
Windows Sandbox configuration
powershell Expand-Archive
Why is Using Invoke-WebRequest Much Slower Than a Browser Download
根据 CC-BY-NC 4.0 共享