繁体   English   中英

从asp.net发送数据到正在运行的Windows应用程序

[英]Sending Data to Running Windows Application from asp.net

我正在尝试从asp.net网页将数据发送到以C#编写的正在运行的Windows窗体应用程序。 从网页调用应用程序时无法启动应用程序的问题,但是如果我尝试从命令行运行它,则该应用程序无法启动。

这是在asp.net中启动我的应用程序的代码部分

protected void Page_Load(object sender, EventArgs e)
{
   // ClientScript.RegisterStartupScript(GetType(), "Javascript", "javascript:connectSocketServer(); ", true);
    SecureString sc = new SecureString();
    string Source = "*****";
    foreach (char c in Source.ToCharArray())
    {
        sc.AppendChar(c);
    }
    ProcessStartInfo i = new ProcessStartInfo(@"C:\******\myapp.exe", "test");
    i.UserName = "******";
    i.UseShellExecute = false;
    i.Password = sc;
    i.Verb = "runas";
    Process p = new Process();
    p.StartInfo = i;
    p.Start();    
}

这是我应用程序中的代码

static System.Threading.Mutex mutex = new Mutex(true, "{8F6F0AC4-B9A1-45fd-A8CF-72F04E6BDE8F}");

[STAThread]
static void Main(params string[] Arguments)
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Form1 mf = new Form1();

    if (mutex.WaitOne(TimeSpan.Zero, true))
    {
        Application.Run(mf);
        mutex.ReleaseMutex();
    }
    else
    {
        MessageBox.Show("only one instance at a time");
        mf.SendData(Arguments);

    }
}

并在表单中有一个称为SendData的公共函数,它将处理数据...

因此,如果我从cmd line和Pass参数运行它,则SendData将被执行,但是从网页无法正常运行...

注意:我删除了IWAP用户下应用程序在任务管理器上看到的用户名和密码信息,但不显示表格

您的进程正在启动,但由于它具有在ASP .NET辅助进程中运行的权限受限而停止响应。 您的新流程无权访问此上下文之外的任何内容。

您可以提升工作进程的权限 ,也可以允许IIS服务与桌面进行交互, 如另一个答案所述

但是 ,在注释中,您提到Windows应用程序充当了已连接客户端的服务器。 除非仅出于测试目的,否则我将建议通过API或Web服务对这些客户端套接字使用不同的方法。 带有.NET远程处理功能的Windows服务甚至更好,但是我建议您仅使用WCF。

经过测试,希望可以解决您的问题,使用Try Catch块是一个好习惯

protected void Page_Load(object sender, EventArgs e)
    {

            SecureString sc = new SecureString();
            string Source = "*****";
            foreach (char c in Source.ToCharArray())
            {
                sc.AppendChar(c);

            }
            sc.MakeReadOnly();
            try
            {
                ProcessStartInfo i = new ProcessStartInfo(@"C:\******\myapp.exe", "test");
                i.Domain = "*****";
                i.UserName = "*****";
                i.UseShellExecute = false;
                i.CreateNoWindow = true;
                i.RedirectStandardOutput = true;
                i.Password = sc;
                i.Verb = "runas";
                Process p = new Process();
                p = Process.Start(i);
            }
            catch (Win32Exception w32E)
            {
               // Display Some Message
            }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM