2009-07-13 2 views
1

.NET MVCでイントラネットを構築しました。また、私はWinforms(パフォーマンスの選択)で別の計画ツールを構築しています。イントラネット(IE7)から計画ツールを開き、その特定のアイテムの計画を表示できるように引数(例:Workorder番号)を渡したいと思います。これは可能ですか?Webページ(イントラネット)から.NETアプリケーション(no-install)を実行し、引数を渡しますか?

私はWinformsアプリケーション用の.applicationファイルを持っています。また、.NET MVCイントラネットとWinforms計画ツールのすべてを変更することもできます。

答えて

1

単にHTMLからアプリケーションを呼び出すことはできません。それはセキュリティホールになるでしょう。ただし、レジストリを介してこれらの要求を処理できるようにアプリケーションを登録することができます。あなたは「no-install」と言っているので、これは問題かもしれません。アプリが最初の読み込み時にレジストリを変更する可能性があります。

とにかく、特定のプロトコルを処理するためにアプリケーションが登録されます(たとえば、「iTunes://」または「ftp://」リンクをクリックしたときなど)。その後、指定された引数を使ってアプリを起動する

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

代わりに、あなたのような何かを持っていると思います。

http://msdn.microsoft.com/en-us/library/aa767914(VS.85).aspxを参照してください。あなたはIE7と言いますが、プロトコルが登録されると、これは他のブラウザでも機能します。

+0

自分で処理するプロトコルを追加できますが、問題はありません。しかし、アプリケーション自体には引数はありません。手動でコマンドラインを実行しても、引数はありません。私はMyApp.ApplicationまたはSetup.exeを実行することしかできず、両方とも実際のアプリケーションに引数を渡すようには見えません...? – Ropstah

+0

hkeyに%1が含まれていますか? –

+0

はい。私はアプリケーションにクエリーストリングのパラメータを渡すことを含む別の解決策を見つけました。これは私のために働いています(ただし、Firefoxではありません..... ClickOnceはFFで正しく動作していません)。 – Ropstah

1

はいできます。

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からの出力とエラーを読み取ることができます。

+0

私はアプリを起動する必要があります。しかし、努力のための高尚な。 +1 – Ropstah

関連する問題