Sandboxie 或 RunAsInvoker 中正常使用 Rime 小狼毫输入法

折腾机缘

Rime 小狼毫是 Windows 系统中为数不多的开源免费输入法,现在是我的主力输入法。

在此之前,我个人是主力使用微软拼音输入法的,但在系统更新到 Windows 10 2004 版本后,微软拼音输入法的 Bugs 层出不穷,如无法正常定位光标位置等,我也曾经在小众软件论坛中发帖吐槽过此事。这一系列的问题让我不得不考虑放弃使用微软拼音输入法。而正当我在考虑要凑合着继续用的时候,我在机缘巧合之下,同样是在小众软件论坛中看到了这个帖子,当中懒人现成的方案让我二话不说便迅速转移到 Rime 小狼毫输入法中。

实际上,我在大学期间曾有过一段主力使用 Rime 输入法的经历,当时候我甚至对于词库词频、输入法外观都做了各种自定义和优化。只可惜当时候并没有备份的概念,一次硬盘的损坏让当时折腾的成果付诸东流。而恰逢当时候 Windows 10 刚刚发布更新,Rime 输入法仅能在 Windows 10 系统中的部分软件实现正常的输入,而在各种游戏、UWP 软件中会出现无法调用的情况。Rime 的开发者佛振后来也对此发表了声明,意思这是旧的前端程序的问题导致的,后续会发布全新的程序作为代替以实现兼容 Windows 10。尽管我个人是非常喜欢与欣赏开源的产品,但我考虑到日常生活中的正常使用,因此逐渐过渡到微软拼音输入法上。

不知不觉多年就过去了,微软拼音输入法成为了唯一与习惯,直到我看到了上文中提及到的帖子,我又重新回到了 Rime 小狼毫的怀抱中。

美中不足

Rime 小狼毫在佛振等作者的共同努力下,已经变得稳定和成熟,并非像当初的兼容性问题搞得焦头烂额。可对于系统软件有洁癖的我而言,我的使用场景不同于普通用户,因此我在折腾中遇到一些不可避免的问题。

首先我是 Sandboxie 沙盘软件,以及低权限隔离用户方案的使用者,而 Rime 小狼毫在默认安装后的状态下,是不能直接正常在这两种使用场景中被调用使用的,会出现无法显示输入框与候选框,仅能输入英文。

我也简单介绍一下这两种场景:

  • Sandboxie,是一款从Windows 系统底层层面上,将真实系统环境与虚拟系统隔离的软件。国内使用这款软件的通常是用于软件、游戏的双开或者多开,反倒像我这种以安全为主要目的的用户是少数派,我更偏向用于装载不确定安全性的软件、以及某些强制要求管理员权限的国产软件。
  • 低权限隔离用户方案,这个词是我自创的,但方案本身并不是。在中文世界中我是从这篇教程文章看到的,后来这套方案也在少数派被另外一位作者 SunsetYe 进行再演绎发布。有需求的可以在这两篇文章中进行阅读学习。于我个人而言,我的电脑系统中的国产软件或免费软件只要并非强制要求管理员身份运行才可以安装或使用的情况,我均采用这种方式。简单说说大致原理是,在系统中创建一个没有管理员权限的受限用户身份,在当前正在使用的管理员用户中调用这个受限用户的身份,将相关的 app 以这个用户的身份进行安装、运行,从而避免某些软件滥用管理员权限在后台肆意妄为。这一系列操作中,其中牵涉到的是 RunAsInvoker 的避免调用管理员身份运行的指令,关于 RunAsInvoker 更准确的介绍可参考:https://devblogs.microsoft.com/oldnewthing/20161117-00/?p=94735

解决方案

经过我查阅与测试,这两种场景下的解决操作步骤是不一样的,但是本质上还是要让在这种安全环境中的软件能正常加载 Rime 的服务项。

以下教程将默认你已经了解 Sandboxie 和低权限隔离用户的基本安装与使用方法,详细的安装教程将不再赘述,需要学习的请使用搜索引擎或看上文中提及的教程文章

Sandboxie 中调用 Rime 小狼毫

  1. 新建沙盘后,鼠标右键点击所新建的沙盘,选择沙盘设置

2. 依次点击「资源访问」>「文件访问」>「完全访问」,找到「编辑/添加」,输入 \Device\NamedPipe\你的用户名\WeaselNamedPipe,点击「确定」x2 后保存设置

3. 如无意外现在启动软件应该能正常调用 Rime 小狼毫输入法了,如果还没有正常调用可先终止沙盘所有软件的运行,再重新启动沙盘中的软件。

低权限隔离用户调用 Rime 小狼毫

1. 教程默认你已经安装 Rime 小狼毫输入法在系统中,并了解 Rime 小狼毫的基本文件结构与功能

2. 以下步骤中,前8步的操作与上文提及到的低权限隔离用户的教程文章中的安装软件的步骤教程基本一致

参考源:https://geelaw.blog/entries/isolate-app/

  1. 以当前用户的身份正常启动 PowerShell 。
  2. 输入 $cred = Get-Credential 并回车。
  3. 输入低权限隔离用户的用户名,回车,例如我的隔离用户名是 Limited
  4. 输入该用户的登录密码,回车(密码默认不显示) 。
  5. 输入 Start-Process powershell -ArgumentList '-Command Start-Process powershell' -Credential $cred -LoadUserProfile,回车,会弹出一个新的 PowerShell 窗口。
  6. 在新的 PowerShell 窗口中输入 $env:__COMPAT_LAYER = 'RunAsInvoker' ,回车。
  7. cd 定位到 Rime 的安装路径,例如 cd "C:\Program Files (x86)\Rime\weasel-0.14.3" ,回车。
  8. 输入 .\WeaselServer.exe ,回车,等待部署
  9. 把你原有的 Rime 配置 C:\Users\你的当前用户名\AppData\Roaming\Rime 中的文件转移到文件夹 C:\Users\你的低权限隔离用户名\AppData\Roaming\Rime 中。
  10. 尝试启动低权限隔离用户中的软件,如无意外软件已经可调用 Rime 小狼毫输入法。

我与我生命中那些无用的点缀 :)