如何使用Javascript/XPCOM作为Windows "Run..."打开.EXE?



我有一个intranet web应用程序,需要运行一些外部应用程序,如Word、记事本和其他特定的应用程序。。。我的代码允许使用IE(ActiveX)和Firefox(XPCOM)进行访问。当我使用整个路径(如"C:\windows\notepad.exe")时,我可以在两个浏览器中运行,但问题是:有些应用程序有很多版本,如Microsoft Word(200320072010…),本地路径总是不同的,但如果我在windows中使用"运行…"选项,除了它的版本外,我只能键入"winword.exe"和MS Word加载。如果我在IE中只将文件名传递给ActiveX,我就可以调用MS Word,但在Firefox中,使用XPCOM,我就不能了。所以,我的问题是:有没有办法让XPCOM代码只使用它的相对路径(文件名)运行MS Word?我尝试了很多方法,但都没有成功。

这是我的代码:

function RunExe(path) {
    try {            
        var ua = navigator.userAgent.toLowerCase();
        if (ua.indexOf("msie") != -1) {
            MyObject = new ActiveXObject("WScript.Shell")
            MyObject.Run(path);
        } else {
            netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
            var exe = window.Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile);
            exe.initWithPath(path);
            var run = window.Components.classes['@mozilla.org/process/util;1'].createInstance(Components.interfaces.nsIProcess);
            run.init(exe);
            var parameters = [""];
            run.run(false, parameters, parameters.length);
        }
    } catch (ex) {
        alert(ex.toString());
    }
}

电话是这样打来的:

 <a href="#" onclick="javascript:RunExe('winword.exe');">Open Word</a>

如有任何帮助,我们将不胜感激。非常感谢。

我认为你的问题在于IE直接与Windows协同工作,而Firefox是跨平台的。假设你只想在Windows上运行,你可以执行命令提示符

    C:WindowsSystem32cmd.exe

然后像一样给它传递一个论点

    start winword.exe

然后,它将以与Run相同的方式执行。

相关内容

最新更新