Запустить приложение .NET (без установки) с веб-страницы (интрасети) и передать аргумент (ы)? - PullRequest
1 голос
/ 13 июля 2009

Я построил интранет на .NET MVC. Я также создаю отдельный инструмент планирования в Winforms (выбор производительности). Теперь я хотел бы «открыть» инструмент планирования из внутренней сети (IE7) и передать аргумент (например, номер рабочего заказа), чтобы я мог отобразить планирование для этого конкретного элемента. Это возможно?

У меня есть файл приложения для приложения Winforms. Я также могу изменить все как в интрасети .NET MVC, так и в инструменте планирования Winforms.

Ответы [ 2 ]

1 голос
/ 13 июля 2009

Вы не можете просто вызвать приложение из HTML; это было бы дырой в безопасности. Однако вы можете зарегистрировать приложение, чтобы обрабатывать эти запросы через реестр. Вы говорите «не устанавливать», так что это может быть проблемой. Возможно, ваше приложение может изменить реестр при первой загрузке.

В любом случае, приложение регистрируется для обработки определенного протокола (например, когда вы нажимаете на ссылку itunes: // или ftp: //).

Вместо этого у вас будет что-то вроде:

<a href="planning://3472">View workflow #3472</a>

, который затем запускает ваше приложение с указанным аргументом.

См. http://msdn.microsoft.com/en-us/library/aa767914(VS.85).aspx. Вы говорите IE7, но это должно работать и с другими браузерами, как только протокол зарегистрирован.

1 голос
/ 13 июля 2009

Да, вы можете сделать это.

private string _output = "";

public string Execute()
{
   try
   {
        Process process = new Process();
        process.OutputDataReceived += new DataReceivedEventHandler(process_OutputDataReceived);
        process.StartInfo.FileName = "path to exe";
        process.StartInfo.Arguments = "here you can pass arguments to exe";
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardOutput = true;
        Process currentProcess = Process.GetCurrentProcess();
        process.StartInfo.UserName = currentProcess.StartInfo.UserName;
        process.StartInfo.Password = currentProcess.StartInfo.Password;
        process.Start();
        process.BeginOutputReadLine();
        process.WaitForExit();
        return _output;
    }
    catch (Exception error)
    {
        return "ERROR : " + error.Message;
    }
}
private void process_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
    if (e.Data != null)
    {
        _output += e.Data + Environment.NewLine;                
    }
}

Это простой пример. Вы можете использовать разные потоки для чтения вывода и ошибок из exe.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...