我有一个与客户争执了几个星期的奇怪要求。
该客户端具有独立的Winform exe和Web应用程序,它们位于Windows 2012 Server上。该计划是将exe应用程序合并到Web应用程序中,以便可以通过浏览器呈现或通过超链接调用它。 exe应用程序是可移植的。 Web应用程序在用C#编写的.NET Framework 3.5上运行。
由于服务器上的高安全性限制,我的尝试似乎都无效。当我单击页面上的按钮时,没有任何反应。
我现在正在探索通过WebDAV向最终用户交付exe应用程序。任何想法都会有所帮助
我尝试了以下操作:
在web.config上,我设置了路径。
<appSettings>
<add key="EXELOC" value="C:\Temp\addons\"/>
</appSettings>
在aspx页面上,我有一个调用应用程序的按钮。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Diagnostics;
using System.Configuration;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnStart_Click(object sender, EventArgs e)
{
string locn = ConfigurationManager.AppSettings["EXELOC"];
Process myProcess = new Process();
try
{
myProcess.StartInfo.UseShellExecute = True;
myProcess.StartInfo.FileName = locn + "Application.exe";
myProcess.StartInfo.CreateNoWindow = true;
myProcess.Start();
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
}
我为IIS应用程序池设置了访问该exe所在文件夹的权限:
$IncomingPath = "C:\Temp\Addons"
$Acl = Get-Acl $IncomingPath
$Ar = New-Object system.security.accesscontrol.filesystemaccessrule("IIS AppPool\addons","FullControl","ContainerInherit, ObjectInherit", "None", "Allow")
$Acl.SetAccessRule($Ar)
Set-Acl $IncomingPath $Acl
我也尝试使用URI:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Ach]
@="URL:Ach Protocol"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\Ach\DefaultIcon]
@="C:\\Temp\\addons\\Application.exe"
[HKEY_CLASSES_ROOT\Ach\shell]
[HKEY_CLASSES_ROOT\Ach\shell\open]
[HKEY_CLASSES_ROOT\Ach\shell\open\command]
@="\"C:\\Temp\\addons\\Application.exe\" /u \"%1\""
我也尝试过设置应用程序UNC并通过Javascript进行调用:
<script type="text/javascript" language="javascript">
function RunFile() {
WshShell = new ActiveXObject("WScript.Shell");
WshShell.Run("\\\\192.168.5.8\\Applications\\Application.bat", 1,false);
}
</script>
什么都没有。
现在该告诉客户,除非他愿意为重新开发整个平台付费,否则他想要的东西并不重要,这意味着数千万的成本。不管他想要什么,这根本不是事情的运作方式。在服务器上运行的.exe文件不会神奇地将其输出传输到浏览器。