如何从ASP.NET站点打开.EXE文件?

如何从ASP.NET站点打开.EXE文件?,asp.net,iis,iis-7,executable,Asp.net,Iis,Iis 7,Executable,我可以从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.UseShell

我可以从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中托管时才会打开该文件


非常感谢您的帮助。提前谢谢。

在几乎任何情况下,您都无法在客户端(运行浏览器的计算机)上启动可执行文件

您的代码是C#,它位于服务器上,看起来它正在尝试运行记事本,如果工作实际是在服务器上打开记事本实例,而不是在客户端


如果您确实允许客户端授予您运行记事本的权限(一个大If),您可能还希望在计算机不是windows PC的情况下显示一些内容(例如,首先没有记事本)

您可以尝试使用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>

运行可执行HTA
函数RunEXE(prog)
{
var oShell=newActiveXObject(“WScript.Shell”);
运行(““+prog+”,1);
}
编辑

删除硬编码

编辑

正在更新应答,因为OP正在尝试使用Design.exe


正如我所说的,我不希望这样做,但因为这是一项要求,让我们看看我们能做些什么。假设Design.exe文件有自己的文件扩展名(即.txt、.des),而不是试图打开Design.exe并向其传递要加载的文件,也许您可以使用响应流传输文件,当用户打开下载时,Windows(假设是操作系统)将自动使用Design.exe打开文件吗?

如果绝对必须这样做,我建议您不要

选项1:
如果您只需要支持IE,一个选项是构建一个带有按钮的小ActiveX控件,该按钮将弹出到所需的程序,并将其嵌入到网页中

选项2:

如果您试图在design.exe中打开特定文件,用户有一个你想打开的文件类型,在他们的系统上注册到该应用程序,你只需在网页上放置一个指向该文件的链接,该文件具有适当的扩展名,它就会打开包含该文件的应用程序。

我说不会,但如果你取消选中足够的安全设置,并在每台客户端计算机上的受信任源中添加足够的引用,您可能可以打开记事本…但请不要打开。web应用程序和桌面应用程序之间的区别是有原因的。我试图暗示这在所有可能的方面都是不可行的,但在技术上是可能的(技术上)…不要硬编码到记事本的路径。是的,这是一个经常重复的,尽管是错误的概念的例子。以此为例只会鼓励其他开发人员犯同样的错误。这是一个悲哀的现实,大多数人只是复制和粘贴他们在网上找到的代码。像这样的例子既不能提供信息,也不利于社区。更新时没有硬编码。我仍然认为这个社区的人对例子太过拘泥(不是“这里是你需要的确切代码”),但是嘿,不管有什么帮助=)睡得更好@bitxwise:显然,我知道最好不要将我在网上找到的代码复制粘贴到生产项目中,但我也很清楚,不是所有人都这么看。我最初的观点是,你的“榜样”很糟糕,因为它延续了一种常见的坏习惯。即使你知道的更多,你也不能假设其他人都知道。不管怎样,自从你修改代码以来,我已经取消了我的反对票。@Cody:注意。我同意,不同的文化需要改变。尽管我一直在学校鼓励良好的做法而不是谴责坏的做法,无论如何,谢谢你没有让我在这个例子中懒惰。干杯,你为什么要这么做?如果你认为这是一个可以接受的选择,那么你的应用程序和你对安全性的尊重就会严重受损。我同意科迪的观点,你不应该这样做。然而,我也明白,在许多环境中,用户(主要是公司用户)喜欢这样为他们做的事情。如果有任何问题,您应该使用响应流来传输文件数据,并允许操作系统(即Windows)将任何文件与正确的程序关联以处理它。@Swapnil:是记事本吗?还是另一个计划?@Swapnil:这正是我所希望的。正如我在下面的回答中所说,文件扩展名告诉操作系统使用哪个程序打开文件。第二个问题是,如果允许的话,这是一个巨大的安全漏洞。你能想象如果网站可以在你的机器上运行任意程序而不是打开弹出窗口会发生什么吗?简单地说,如果你需要直接从网页打开记事本,那你就错了。回到绘图板。我可能已经尝试了选项2,我在站点配置中添加了文件扩展名。但它不会启动应用程序的窗口。这个过程只在后台运行(显示在任务管理器中)。我想你们可能会从阅读网站的工作原理中受益。您在web服务器上所做的任何更改都不会影响客户端上的行为。您需要确保文件类型已在用户(客户端)计算机上注册。不是服务器。是的,我知道,但我试过了。对于选项1,如果我在ActiveX中添加可执行文件的引用,它会直接启动应用程序吗?它会执行ActiveX控件中的代码要求它执行的任何操作。当用户安装ActiveX控件并允许浏览器使用它时,他们基本上是在授予它权限,允许它执行登录用户可以执行的任何操作。浏览器(以及JavaScript)通常会试图阻止这种情况发生,否则你可能会对任何访问你网站的人的机器做出可怕的事情。还有,我想你还是不明白。用户界面上没有“站点配置”