阅读:3774回复:8
firefox启动带参数的程序
本人写了一个客户端程序,通过IE启动成功,
为了兼容firefox 也能启动该客户端程序 编写了如下js代码 function OpenProg() { //可执行程序参数 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); var process = Components.classes['@mozilla.org/process/util;1'].getService(Components.interfaces.nsIProcess); var targetFile = Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile); var oURL ="123e735e-7cd5-4d72-8a97-9d9900b00163|"; targetFile.initWithPath("xx.exe"); process.init(targetFile); var arguments = [oURL]; //arguments参数必须是数组,否则下面语句不执行 process.run(false, arguments, arguments.length); } 第一次 OpenProg()可以打开程序成功,第二次执行OpenProg()该打开时,提示一下错误。 需要重新启动forefox 才能再次启动程序 错误提示 [Exception... "Component returned failure code: 0xc1f30002 (NS_ERROR_ALREADY_INITIALIZED) [nsIProcess.init]" nsresult: "0xc1f30002 (NS_ERROR_ALREADY_INITIALIZED)" location: "JS frame :: file:///C:/Program%20Files/firefoxTest.html :: helloOpen :: line 58" data: no] 问: 是不是程序已经加载如进程,所以不能再加载第二次加载,要不会出错?需要消耗该进程实例对吗 请高手指点,散分 |
|
1楼#
发布于:2010-07-27 11:20
散分...CSDN来的兄弟吧-_-
https://bugzilla.mozilla.org/show_bug.cgi?id=485379 var process = Components.classes['@mozilla.org/process/util;1'].getService(Components.interfaces.nsIProcess); 换成 var process = Components.classes['@mozilla.org/process/util;1'].createInstance(Components.interfaces.nsIProcess); 再试试 |
|
|
2楼#
发布于:2010-07-27 11:20
Cye3s:散分...CSDN来的兄弟吧-_-谢谢楼上 可以运行了 打开程序了 新的问题又来了 程序是注册到环境变量的 不是使用绝对路径 targetFile.initWithPath("xx.exe"); 要如何能打开程序 |
|
3楼#
发布于:2010-07-27 11:20
路过看看
|
|
4楼#
发布于:2010-07-27 11:20
给个读注册表的例子吧,环境变量在注册表里有,按分号解析路径,一个个判断吧
参考文档 https://developer.mozilla.org/en/access ... sing_xpcom try { var regkey = Components.classes["@mozilla.org/windows-registry-key;1"].createInstance(Components.interfaces.nsIWindowsRegKey); regkey.open(Components.interfaces.nsIWindowsRegKey.ROOT_KEY_LOCAL_MACHINE, "SOFTWARE\\Mozilla\\Mozilla Firefox\\3.6.8 (zh-CN)\\Main", Components.interfaces.nsIWindowsRegKey.ACCESS_READ); var path = regkey.readStringValue("Install Directory"); regkey.close(); alert(path); } catch (ex) { regkey.close(); } |
|
|
5楼#
发布于:2010-07-27 11:20
来了,直接读环境变量
var environment = Components.classes["@mozilla.org/process/environment;1"]. getService(Components.interfaces.nsIEnvironment); var path = environment.get('PATH'); 用;切割,组合文件路径 然后用targetFile.exists()判断文件是否存在 存在就启动 |
|
|
6楼#
发布于:2010-07-27 11:20
插楼
|
|
7楼#
发布于:2010-07-27 11:20
什么东东??凑热闹看看
引导器么?? |
|
8楼#
发布于:2010-07-27 11:20
大家真的好热情
比CSDN多呀 看来搞这方面的兄弟不少 感谢Cye3s 千年狐狸 提供的建议 我的思路是通过写一个vc程序实现读写注册表的 如果能在firefox里面直接读取注册表就 就省了很多事 我试试 感谢祖国, 感谢各位热情网友, 感谢万能的 Mozilla Firefox中文社区论坛 感谢CCTV 感谢TVB... 我会继续努力 |
|