eoenetcom
小狐狸
小狐狸
  • UID33543
  • 注册日期2010-07-26
  • 最后登录2010-09-01
  • 发帖数9
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
阅读:3774回复:8

firefox启动带参数的程序

楼主#
更多 发布于:2010-07-27 11:20
本人写了一个客户端程序,通过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]

问:
  是不是程序已经加载如进程,所以不能再加载第二次加载,要不会出错?需要消耗该进程实例对吗
  请高手指点,散分
Cye3s
千年狐狸
千年狐狸
  • UID155
  • 注册日期2004-11-25
  • 最后登录2024-04-28
  • 发帖数1322
  • 经验95枚
  • 威望0点
  • 贡献值34点
  • 好评度14点
  • 社区居民
  • 忠实会员
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);
再试试
我很懒...
eoenetcom
小狐狸
小狐狸
  • UID33543
  • 注册日期2010-07-26
  • 最后登录2010-09-01
  • 发帖数9
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
2楼#
发布于:2010-07-27 11:20
Cye3s:散分...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);
再试试
回到原帖
谢谢楼上
可以运行了
打开程序了

新的问题又来了
程序是注册到环境变量的
不是使用绝对路径
targetFile.initWithPath("xx.exe");
要如何能打开程序
halffog
小狐狸
小狐狸
  • UID32571
  • 注册日期2010-04-15
  • 最后登录2013-07-19
  • 发帖数87
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
3楼#
发布于:2010-07-27 11:20
路过看看
Cye3s
千年狐狸
千年狐狸
  • UID155
  • 注册日期2004-11-25
  • 最后登录2024-04-28
  • 发帖数1322
  • 经验95枚
  • 威望0点
  • 贡献值34点
  • 好评度14点
  • 社区居民
  • 忠实会员
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();
}
我很懒...
Cye3s
千年狐狸
千年狐狸
  • UID155
  • 注册日期2004-11-25
  • 最后登录2024-04-28
  • 发帖数1322
  • 经验95枚
  • 威望0点
  • 贡献值34点
  • 好评度14点
  • 社区居民
  • 忠实会员
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()判断文件是否存在
存在就启动
我很懒...
halffog
小狐狸
小狐狸
  • UID32571
  • 注册日期2010-04-15
  • 最后登录2013-07-19
  • 发帖数87
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
6楼#
发布于:2010-07-27 11:20
插楼
zelcian
小狐狸
小狐狸
  • UID23208
  • 注册日期2008-03-11
  • 最后登录2014-04-30
  • 发帖数42
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
7楼#
发布于:2010-07-27 11:20
什么东东??凑热闹看看
引导器么??
eoenetcom
小狐狸
小狐狸
  • UID33543
  • 注册日期2010-07-26
  • 最后登录2010-09-01
  • 发帖数9
  • 经验10枚
  • 威望0点
  • 贡献值0点
  • 好评度0点
8楼#
发布于:2010-07-27 11:20
大家真的好热情
比CSDN多呀

看来搞这方面的兄弟不少
感谢Cye3s
千年狐狸
提供的建议

我的思路是通过写一个vc程序实现读写注册表的
如果能在firefox里面直接读取注册表就
就省了很多事
我试试

感谢祖国,
感谢各位热情网友,
感谢万能的 Mozilla Firefox中文社区论坛
感谢CCTV
感谢TVB...

我会继续努力
游客

返回顶部