快速为文件创建sandboxie中运行的快捷方式(使用bat)

重所周知,sandboxie创建程序在sandboxie内运行的快捷方式有点麻烦。操作步骤比较多,选择程序的过程中sandboxie有难以忍受的卡顿。

因此我打算写一个bat,把bat丢到sendTo路径,这样我对着一个软件右键-发送到-自定义bat,就可以快速创建快捷方式了。
通过百度和测试,发现有三种书写创建快捷方式的方式:

  1. mklink命令。此方案在win10中需要修改组策略(仅有管理员权限,未修改策略,是无法成功运行命令的),且无法添加运行时的参数,故不可用
  2. 创建InternetShortcut文件。我在测试时发现点击文件只能打开edge浏览器,无法像介绍一样执行其他程序。
  3. 调用vbs生成快捷方式

所以其实只有一种。
首先我找了一个sandboxie的快捷方式查看他的参数:
"C:\Program Files\Sandboxie\Start.exe" /box:DefaultBox "C:\Users\Yazii\Desktop\虾米音乐.lnk"
显然分为三个部分:sandboxie启动路径、调用沙盒的名称、被调用的程序

下边是我的成品。

@ECHO OFF
IF  not exist %1 exit
if /i %~x1 == .exe (goto y)
if /i %~x1 == .msi (goto y)

mshta VBScript:Execute("Set a=CreateObject(""WScript.Shell""):Set b=a.CreateShortcut(a.SpecialFolders(""Desktop"") & ""\[sandbox]%~n1.lnk""):b.TargetPath=""C:\Program Files\Sandboxie\Start.exe"":b.WorkingDirectory=""%~dp1"":b.Arguments=""/box:DefaultBox  %~1"":b.Save:close")
exit
:y
 mshta VBScript:Execute("Set a=CreateObject(""WScript.Shell""):Set b=a.CreateShortcut(a.SpecialFolders(""Desktop"") & ""\[sandbox]%~n1.lnk""):b.TargetPath=""C:\Program Files\Sandboxie\Start.exe"":b.WorkingDirectory=""%~dp1"":b.Arguments=""/box:DefaultBox  %~1"":b.IconLocation=""%~1"":b.Save:close")
 exit

但是目前仍不完美。最凸出的一个问题是,参数的第三部(即被调用的程序的路径)是没有引号包裹的,这可能会导致一些问题。
其他有待完善的地方有:

  1. sandboxie的路径是手动写死的,不能自动探测路径。(我觉得无所谓,有复制这个bat到sendTo路径的时间,也就把路径配置好了)
  2. 沙盒名称是默认沙盒,不能手动选择(对我来说也不是问题,我只用默认沙盒;如果切实有需求,直接多复制几个bat,甚至在sendto路径建一个文件夹放sandboxie的快捷方式都不是很费力气
  3. 除exe和msi后缀外,其他文件的快捷方式无法正常显示图标。
    4.对lnk快捷方式,无法正常显示图标。

关于第三点,实际上是有解决方法的,但是实在能力有限,有思路,但是不会写。
基本思路是:

  1. 从注册表获取输入的文件的后缀关联的应用。
    REG QUERY HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts\%~x1\OpenWithProgids
  2. 从注册表获取程序在电脑上的路径。
    HKEY_LOCAL_MACHINE\SOFTWARE\Classes\应用程序名称\shell\open\command
  3. 把路径添加到IconLocation参数中去。

关于第四点:需要在解析快捷方式对应的指向文件路径,使用被指向的文件进行处理。目前我还不能搞定。

回头想想,这种问题给sandboxie替issue或者自己改sandboxie程序或者直接c语言写个程序是最方便的,而bat写起来太脑抽了。但是我就是那种比较讲缘份的人,用bat下手了,就不打算改门庭了。

“D:\Sandbox\<用户名>\DefaultBox\drive\C\Program Files (x86)\Tencent\WeChat\WeChat.exe”

我的快捷方式是这么用的,还行。

Claunch注册项目可以直接选取运行中的沙盒窗口,能正确的获取到沙盒路径下的程序路径,然后就是sandboxie只要在运行中,直接启动这个沙盒路径下的exe,就直接沙盒化了。