2016-09-07 52 views
0

運行Windows應用程序我試圖將數據發送到從我的asp.net頁面用C#編寫一個運行Windows窗體應用程序。 當我從網頁調用應用程序時,應用程序並未啓動,但如果我嘗試從命令行運行它,則會出現問題。將數據發送到從asp.net

這是代碼在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); 

    } 
} 

和形式有一個名爲送出數據公共職能這將處理數據...

所以,如果我從cmd行和傳遞參數運行它,SendData將被執行,但從網頁不工作...

注:我取下下IWAP用戶,但形式的用戶名和密碼信息的應用apears在任務管理器不顯示

+0

隨機過程是在任務管理器中可見,或者它根本不執行呢? –

+0

如果我通過CMD運行的是這將是可見的,但是從網頁NOP –

+0

你檢查Windows事件日誌中關於爲什麼過程中不會啓動任何細節?你能否提供'p'屬性的某些值,例如'HasExited','Responding'等? –

回答

0

你的進程正在啓動,但它停止響應,因爲它已成爲制約權限ASP .NET輔助進程的上下文中運行。您的新流程沒有權限訪問此環境以外的任何內容。

您可以選擇elevate the permission of the worker process或允許IIS服務與桌面as explained in another answer進行交互。

但是,在您提到的註釋中,您的Windows應用程序充當連接客戶端的服務器。除非它僅用於測試目的,否則我會通過API或Web服務向這些客戶端套接字推薦一種不同的方法。與.NET遠程處理的Windows服務甚至更好,但我建議只使用WCF。

-2

Tested.Hope這將解決您的problem.Its一個很好的做法是使用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 
      } 
} 
+0

OP沒有提到有關引發異常的任何信息。實際上,他特別提到這個過程確實在運行,只是沒有做任何事情。 –

+0

以上代碼對於Windows窗體應用程序工作正常。只要我們需要做的是給例如正確的路徑。 C:\項目\ WinApplication \ WinApplication \ OBJ \調試\ WinApplication.exe – ADarnal

相關問題