我可以从IIS上托管的ASP.NET站点在客户端计算机上打开可执行文件吗?
我尝试在ASP.NET中使用以下代码:
Process notePad = new Process();
notePad.StartInfo.FileName = "notepad.exe";
notePad.StartInfo.Arguments = @"E:\abc.txt";
notePad.StartInfo.CreateNoWindow = false;
notePad.StartInfo.UseShellExecute = false;
notePad.StartInfo.RedirectStandardOutput = false;
notePad.Start();
以及使用以下代码的Javascript:
function Launch() {
var w = new ActiveXObject("WScript.Shell");
w.run('notepad.exe');
return true;
}
但是,当网站未托管在IIS中时,两个代码段都只会打开文件。
非常感谢任何帮助。提前谢谢。
答案 0 :(得分:2)
在几乎任何情况下, 都无法在客户端(运行浏览器的计算机)上启动可执行文件...
C#中的代码存在于服务器上,看起来它正在尝试运行记事本,如果工作实际上是在服务器上打开记事本实例...而不是客户端。
如果您确实设法允许客户端授予您运行记事本(一个很大的if)的权限,那么您可能还想显示一些内容,如果该计算机不是Windows PC(例如,第一个没有记事本)地方)
答案 1 :(得分:1)
您可以尝试使用Javascript,但这仅适用于IE用户:
<html>
<head runat="server">
<title>Run Executable HTA</title>
<script language="javascript" type="text/javascript">
function RunEXE(prog)
{
var oShell = new ActiveXObject("WScript.Shell");
oShell.Run('"'+prog+'"', 1);
}
</script>
</head>
<body>
<input id="btnMyButton" onClick="RunEXE('notepad.exe')" type="button" value="Notepad" />
</body>
</html>
修改强>
删除了硬编码
修改强>
在OP尝试使用Design.exe时更新答案。
正如我所说,我宁愿不这样做,但是因为这是一项要求,让我们看看我们能做些什么。假设Design.exe文件有自己的文件扩展名(即.txt,.des),而不是尝试打开Design.exe并传递它要加载哪个文件,也许你可以使用Response流来传输文件,当时用户打开下载,Windows(假设操作系统)会自动使用Design.exe打开文件吗?
答案 2 :(得分:0)
如果绝对必须这样做,我建议你不要......
选项1:
如果你只需要支持IE,一个选项是使用一个按钮构建一个小型ActiveX控件,该按钮可以弹出所需的程序并将其嵌入到网页中。
选项2:
如果您尝试在任何design.exe中打开特定文件,并且用户具有要在其系统上注册到该应用程序的文件类型,则只需在Web上添加具有相应扩展名的文件的链接即可页面,它将打开包含该文件的应用程序。