簡體   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