客户要求在网站上添加一个链接可以打开本地安装的一个exe应用程序,这个应用程序每个人的安装路径都是一样的,网上的很多方法都试了还是不行!例如
Process p = new Process(); p.StartInfo.FileName = @"c:\a.exe"; p.StartInfo.UseShellExecute = false; p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; p.StartInfo.CreateNoWindow = true; p.StartInfo.RedirectStandardInput = true; p.StartInfo.RedirectStandardOutput = true; p.Start(); StreamReader sr = p.StandardOutput; s = sr.ReadToEnd(); p.WaitForExit(); p.Close();
这种方式不行的,不知道是不是我操作问题。
还有通过注册表的方式,查了一下,不知道怎么搞的!在线等高手指点!
是不是权限问题?
不知道啊,也不报错!
function runExecutable() { var executableFullPath = 'F:\\常用工具\\屏幕拾色器.exe'; var execut = 'C:\\Program Files\\Youdao\\Dict4\\YodaoDict.exe'; try { var shellActiveXObject = new ActiveXObject("WScript.Shell"); if (!shellActiveXObject) { alert('Could not get reference to WScript.Shell'); return; } shellActiveXObject.Run(executableFullPath, 1, false); shellActiveXObject = null; } catch (errorObject) { alert('Error:\n' + errorObject.message); } }
通过JS的这种方式调用的话,会提示automation 服务器不能创建对象的错误
由于安全原因,你需要制作一个 ActiveX 控件,将启动客户本地程序的逻辑写在此 ActiveX 控件中。
ActiveX没签名的话,部署起来很麻烦,现在我的办法是客户端修改安全级别,通过js建立ActiveX对象执行启动脚本。
具体怎么操作啊,能不能给个示例,谢谢啊
@翟中龙: 也就是你上面的方法,但是要注意路径里面的双斜线个数。对了就可以了。
@清海扬波: 我在本地的IIS上可以的,但是通过局域网内的某个电脑访问就提示“automation 服务器不能创建对象的错误”是怎么会事啊?
@翟中龙: 在对应电脑上,dos注册regsvr32 scrrun.dll试试
@清海扬波: 这个也试过了
function executeCommands(inputparms) { // Instantiate the Shell object and invoke its execute method. var oShell = new ActiveXObject("Shell.Application"); var execut = 'C:\\Program Files\\TeamViewer\\Version7\\TeamViewer.exe'; var commandtoRun = "C:\\WINDOWS\\Notepad.exe"; // Invoke the execute method. oShell.ShellExecute(execut, commandParms, "", "open", "1"); }
我通过这种方式调用,在本地IIS上也是可以的,但是到服务器上点了也没有反应了
@翟中龙: 本地可以的话,说明程序是没问题的,放到服务器上面,看看你本地可以不。我的在本地可以,服务器上面就可以了,所有也不知道你的问题在哪
这个自定义协议即可,mailto:怎么打开了你本地的默认邮件客户端? 国内的什么 pps之类的客户端,为什么从网页可以打开本机程序? 都是自定义协议。 具体解决方案自己搜