Noel Simela Ответов: 1

Запустите exe на стороне сервера ASP.NET


Всем Привет,

У меня есть странное требование от клиента, с которым я боролся в течение нескольких недель.

Клиент имеет автономный exe-файл и веб-приложения, расположенные на сервере Windows 2012. План состоит в том, чтобы включить exe-приложение в веб-приложения, чтобы его можно было визуализировать через браузер или вызывать по гиперссылке. Приложение exe является портативным. Веб-приложения работают на платформе .NET framework 3.5,написанной на языке C#.

Из-за высоких ограничений безопасности на сервере ни одна из моих попыток, похоже, не работает. Когда я нажимаю на кнопку на странице, ничего не происходит.

Сейчас я изучаю возможность доставки exe-приложения конечным пользователям через WebDAV. Любые идеи будут полезны.

Что я уже пробовал:

На 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);
        }

    }


Я также попытался использовать 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>

Richard MacCutchan

Но во всех случаях это приложение будет работать на сервере.

ZurdoDev

Как он и сказал. ^ Это означает, что вы должны загрузить его на клиент, если хотите, чтобы он выполнялся на клиенте.

Noel Simela

Я думаю, что это было бы альтернативой.

1 Ответов

Рейтинг:
6

Dave Kreskowiak

Это гораздо сложнее, чем вы полагаете.

Во-первых, вы не можете запустить файл .EXE из вашего кода javascript, точка. Это огромный риск для безопасности, чтобы позволить такое, поэтому браузеры не позволяют этого.

Кроме того, вы даже не можете создать ActiveXObject в javascript по тем же причинам.

Для того чтобы исполняемый файл запустился, вам не нужно его отправлять .EXE для клиента (вы все равно не можете его запустить), вам понадобится серверная инфраструктура, такая как Citrix или VMware Horizon, где приложение запускается на сервере, и вы можете видеть пользовательский интерфейс приложения, отображаемый на клиенте. Это также требует установки клиентского программного обеспечения для хостинга сервера на каждой машине, которая будет запускать это приложение. Посмотрите на "виртуализацию приложений" или "виртуализацию настольных компьютеров".


Noel Simela

Привет, Дэйв, я знаком с решением RDS и Citrix. Это уникальная ситуация, когда клиент хотел избежать затрат на лицензирование, связанных с такими решениями виртуализации приложений.

Dave Kreskowiak

Да, но они не смогут избежать этого, если захотят запустить приложение с веб-страницы.