已经有两篇介绍Cameyo《Cameyo——免费的VMware ThinApp》和《Cameyo自定义VOS,实现单文件程序便携化》。Cameyo毕竟不如商业的VMware ThinApp强大,在制作中文程序的单文件便携版过程中,会遭遇中文名称程序出错的问题。这个现在暂时只能通过修改中文程序的注册表信息来“纠正”。
Cameyo不支持部分中文程序
应该和unicode有关,Cameyo不支持部分中文程序,会得到一个没有文件名的虚拟文件“.virtual”。不能运行,也不能被Cameyo识别进行“Edit existing package”。
以迅雷精简版为例,用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
- “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,“音乐”无法识别。