hoss
新手上路
新手上路
阅读:18675回复:0

从自然码珍藏版2013的安装过程看传统IME如何突破Windows UAC的层层限制

楼主#
更多 发布于:2014-09-26 12:41
犹记得Windows XP在2004年迎来网络蠕虫高发期,使微软不得不推迟下一代产品Windows Vista的发布,集中人力开发防堵Windows XP系统漏洞的SP2安全补丁。两年后,强调安全性的Windows Vista终于发布,部署了所谓“用户账户控制”(UAC)的安全机制,一时间搞得第三方中文输入法“人仰马翻”,无不寻求关闭该机制以顺利安装输入法。这个问题一直延续到后来的Windows 7/8/8.1都不见改善,早期制作的输入法因安装程序未能兼容新版Windows而面对淘汰,未来第三方输入法前景堪虞。

自然码官方版自2009年发布7.27版以后已停止更新,目前由自然码爱好者上工制作的第三方DIY版“自然码珍藏版2013”还陆续更新,支持最新Windows 8/8.1,但安装前务必要关掉UAC。早期Windows Vista关闭UAC较简单,只需通过控制面板的用户账户取消UAC选项即可:

Windows 7则通过移动滑块至最低级别来关闭UAC:

尽管Windows 8/8.1的UAC控件与Windows 7相同,但随着每次版本更新而不断推高的安全设置,只靠降低UAC级别已经无效,需要通过组策略编辑器 (gpedit.msc)来关闭UAC。

当前Windows 8/8.1的家庭用户大多采用单语言版,不包含专业版以上才提供的组策略编辑器。即使通过第三方安装了组策略编辑器(参考Windows Cannot find Gpedit.msc Error – Windows 7/8 FIXED),循着以下路径打开目录树:
计算机配置>Windows设置>安全设置>本地策略>安全选项
(Computer Configuration>Windows Settings>Security Settings>Local Policies>Security Options)
依然无法找到安装自然码必须禁用的关键配置项目:
用户账户控制:以管理员批准模式运行所有管理员
(User Account Control: Run all administrators in Admin Approval Mode)
看来该配置项目仅存在于专业版以上,无关乎Windows 8/8.1单语言版中是否安装了组策略编辑器。

追本溯源,组策略最早出现于Windows 2000,主要通过修改注册表中相应的项目达到配置计算机的目的。相信大家对注册表不会感到陌生,那么有没有办法找到对应上述配置项目的注册表项呢?经过多番周折,总算从微软TechNet技术资源库找到了《UAC组策略设置和注册表项设置》,详列全部涉及UAC的配置项目所对应的注册表项目,其中安装自然码必须禁用的配置项目为:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System: EnableLUA
默认值1为启用,安装自然码必须改为0禁用。改动后需重启电脑才生效。


接下来,务必要关掉杀毒软件的实时监控,否则安装程序无法顺利完成或安装完成后自然码没有添加到输入法列表中。如果碰到安装程序无法顺利完成,务必再次重启电脑,并关掉杀毒软件的实时监控,重新安装一遍即可。如果碰到安装完成后自然码输入无效或没有出现在输入法列表中,这时输入法设置工具(IMEtool)可以派上用场了。从输入法列表中查看有没有自然码,有则先删除后添加,无则直接添加即可。

至此,自然码安装完毕!重新开机验证自然码输入是否有效。有些安装说明提到要先删掉系统内置的微软拼音输入法或升级后的必应输入法,但实践证明Windows 8/8.1的中文键盘一定要保留一个中文输入法,仅仅留下英文键盘是无效的。如果安装完成后自然码替代了某个中文输入法,则使用上面提到的输入法设置工具加以修复。

然而遗憾的是Windows 8/8.1在不打开用UAC的条件下,其Metro/Modern用户界面的应用无法调用,如Windows应用商店、视频等。视频打不开也就罢了,反正比它出色的替代品多的是,但Windows应用商店打不开就严重了,Windows 8/8.1的未来系统重大升级就无从谈起了(注:桌面模式下的Windows升级只提供周期性补丁更新)。一旦恢复启用UAC,自然码输入是否还保持有效呢?有没有其他副作用呢?

我较后想起早在Windows Vista时代,由五笔爱好者论坛的hhhhwwww改进的传统输入法生成器曾提到通过命令行解决输入法模块受限制的问题,那么Windows 8/8.1是否可以如法炮制呢?有关命令行如下:
echo y|cacls %systemroot%\System32\Zrm2000*.ime /C /G Administrators:F Users:F Guests:F
icacls %systemroot%\System32\Zrm2000*.ime /SetIntegrityLevel L
上述命令行适用于32位系統上。在64位系统上,另有一个系统目录SysWOW64专门用于保存64位系统上32位程序的模块文件(WOW64表示Windows 32-bit on Windows 64-bit)。当安装自然码到64位系统上,相应输入法模块理应安装到SysWOW64目录中,否则即使输入法能够调用,输入法图标可能显示异常。要提高64位系统上32位输入法模块的权限,则需将上述命令行的System32目录改为SysWOW64目录。

然而对照其他输入法模块在System32或SysWOW64目录的文件属性(如必应输入法),自然码模块文件属性的安全选项卡仅缺少其他输入法模块还包含的Everyone组(具有读取和执行权限),其余三个组都已到位,其中ALL APPLICATION PACKAGES具有读取和执行(Read&execute)权限,而SYSTEM和Administrators则具有完全控制(Full control)权限。添加具有读取和执行权限的Everyone组这一步骤实际上是可选的,可以通过资源管理器的图形交互界面完成操作,也可以采用如下命令行:
icacls %systemroot%\System32\Zrm2000*.ime /c /grant Everyone:RX (用于32位系统)
icacls %systemroot%\SysWOW64\Zrm2000*.ime /c /grant Everyone:RX (用于64位系统)
经过实测,在Windows 8/8.1开启了UAC的情况下,可以正常使用自然码输入。至此,自然码珍藏版2013的安装工作终于功德圆满,可以告一段落了。

综上所述,总结以下几点心得:
  1. 关闭用户账户控制并非只有组策略编辑器一途,通过注册表操作也可完成,而且适用于Windows Vista/7/8/8.1所有不同版本。除了导入如下*.reg文件:
    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
    "EnableLUA"=dword:00000000
    还可以直接打开命令行输入完成:
    reg ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f
    上述命令行来源于Windows Vista控制面板的管理工具>系统配置>禁用UAC的启动命令。

    后继Windows 7/8/8.1不提供“禁用UAC”或“启用UAC”,而是“更改UAC设置”。

  2. 也许正是Windows Vista/7禁用UAC不彻底,导致此前两个平台上的自然码状况百出。相反,由于Windows 8/8.1要求彻底禁用UAC,反而安装较为顺利。建议往后在Windows Vista/7上安装时,不妨也采用彻底禁用UAC的方法。至于系统目录的输入法模块权限问题,只要安装正确,就会赋予所需组别和权限。上面提到全面开放输入法模块权限的方法并不可取。
  3. 禁用UAC解决了自然码安装问题,过后重启UAC也已证实不会影响自然码的正常输入。实际上更常见的问题是杀毒软件的实时监控干扰,导致安装无法完成或完成后输入法列表仍不见自然码踪影。切记不管哪家杀毒软件,务必要关闭其实时监控的功能,待安装全部完成后才重新启用。
  4. 安装包解压后有两个子目录,其中一个“64位系统下可调用自然码的常用32位程序”包含以下快捷方式:
  5. ◆Go记事本
    ◆32_iexplore
    ◆Go写字板
    建议安装程序自动检测用户系统是否64位,直接在64位系统的桌面上建立快捷方式,而不是像现在那样等待用户自行发现。
下载自然拼音珍藏版2014-06-22(48.23M):http://dl.vmall.com/c0v2eowouj
游客

返回顶部