更改程序注册表ID信息,让Cameyo支持中文程序


更改程序注册表信息,让Cameyo支持中文程序已经有两篇介绍Cameyo《Cameyo——免费的VMware ThinApp》和《Cameyo自定义VOS,实现单文件程序便携化》。Cameyo毕竟不如商业的VMware ThinApp强大,在制作中文程序的单文件便携版过程中,会遭遇中文名称程序出错的问题。这个现在暂时只能通过修改中文程序的注册表信息来“纠正”。


Cameyo不支持部分中文程序

应该和unicode有关,Cameyo不支持部分中文程序,会得到一个没有文件名的虚拟文件“.virtual”。不能运行,也不能被Cameyo识别进行“Edit existing package”。
以迅雷精简版为例,用Cameyo抓取迅雷精简版后得到这样一个错误文件:

Cameyo不支持部分中文程序

单文件程序没有文件名,程序运行错误显示

Virt info incorrect (is VirApp.ini in Unicode forma?0x41):
AppID=
Publisher=

这样看来是程序的中文ID没有被Cameyo识别。


更改程序注册表ID,让Cameyo支持中文

找到问题所在

解压错误的“.virtual”文件,打开制作记录文件Packager.txt,可以看到关于程序ID的记录是:

1> [524] (11-12 00:56:13 105546ms): AppNameGuess: RegAppName=迅雷精简版, RegPublisher=, RegVersion=

“RegAppName”就是提示为空的“AppID”;测试Publisher无所谓,主要是AppID的问题。

解决方法

既然是程序ID的问题,那么制作过程中直接修改程序注册表的ID信息即可。
延续Cameyo的制作过程中,在完成制作前,修改迅雷精简版的ID信息。
在注册表中找到迅雷的程序信息——thunder_minixl

修改迅雷精简版的ID信息

  • “DisplayName”就是对应“AppID”,将其改为英文“Thunder Lite”。
  • “Publisher”也顺道改为“Thunder”。

这样,就可以点击Cameyo的“Install done”了,可以得到如下文件:

迅雷精简版单文件便携版

再检查,可以发现程序已经显示正确的文件名“Thunder Lite.virtual”,和注册表修改的ID信息一致。
同时记录文件Packager.txt也显示:

1> [1828] (11-12 00:51:07 188281ms): AppNameGuess: RegAppName=Thunder Lite, RegPublisher=Thunder, RegVersion=


测试中发现,只要程序文件ID是以英文开头的程序,Cameyo都能正确识别。比如QQ音乐的原始ID为“QQ音乐 2011”,不做任何更改,Cameyo也能成功单文件便携程序。不过只能被识别为”QQ”的ID,“音乐”无法识别。