2016-09-07 7 views
0

asp.net WebページからC#で書かれた実行中のWindowsフォームアプリケーションにデータを送信しようとしています。 Webページから呼び出すとアプリケーションが起動しないが、コマンドラインからアプリケーションを実行しようとすると問題が発生する。asp.netから実行中の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の行と引数を渡すので、SendDataが実行されますが、Webページが動作していないから...

注:アプリケーションがIWAPユーザーのタスクマネージャで表示されるユーザー名とパスワード情報は削除しますが、フォームにはが表示されません。

+0

がタスクマネージャに表示プロセスであり、あるいはそれがすべてで実行していない使用することをお勧めを解決するのだろうか? –

+0

私はcmdで実行する場合はそれが表示されますが、ウェブページからは表示されません –

+0

Windowsイベントログで、プロセスが開始されない理由について詳細を確認しましたか? 'HasExited'、' Responding'などの 'p'プロパティのいくつかの値を提供できますか? –

答えて

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:¥Projects¥WinApplication¥WinApplication¥obj¥Debug¥WinApplication.exe – ADarnal

関連する問題