2009-07-13 5 views
1

J'ai construit un intranet sur .NET MVC. Je construis également un outil de planification séparé dans Winforms (choix de performance). Je voudrais maintenant 'ouvrir' l'outil de planification de l'intranet (IE7) et passer un argument (par exemple le numéro de commande) afin que je puisse afficher la planification pour cet élément spécifique. Est-ce possible?Exécuter l'application .NET (pas d'installation) à partir de la page Web (intranet) et passer les arguments?

J'ai un fichier .application pour l'application Winforms. Je suis également capable de tout changer à la fois sur l'intranet .NET MVC et sur l'outil de planification Winforms.

Répondre

1

Vous ne pouvez pas simplement appeler l'application à partir du code HTML; ce serait un trou de sécurité. Cependant, vous pouvez demander à l'application de s'inscrire pour pouvoir traiter ces demandes via le registre. Vous dites "no-install", donc cela pourrait être un problème. Peut-être que votre application pourrait modifier le registre sur le premier chargement. Quoi qu'il en soit, l'application s'inscrirait pour gérer un protocole spécifique (comme lorsque vous cliquez sur un lien itunes: // ou ftp: //).

Au lieu de cela, vous auriez quelque chose comme:

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

qui lance alors votre application avec l'argument spécifié.

Voir http://msdn.microsoft.com/en-us/library/aa767914(VS.85).aspx. Vous dites IE7, mais cela devrait fonctionner avec d'autres navigateurs, une fois le protocole enregistré.

+0

Je peux ajouter le protocole de gestion moi-même, ce n'est pas un problème. Cependant, aucun argument n'est reçu dans l'application elle-même ... Pas même quand je l'exécute manuellement via la ligne de commande. Je peux seulement exécuter MyApp.Application ou Setup.exe, et les deux ne semblent pas passer les arguments à l'application réelle ...? – Ropstah

+0

Etes-vous sûr que le hkey inclut le% 1? –

+0

Oui, c'est le cas. J'ai trouvé une autre solution qui inclut le passage de paramètres de chaîne de requête à l'application. Cela fonctionne pour moi (mais pas dans Firefox ..... ClickOnce ne fonctionne pas correctement en FF) .. J'aime mieux votre solution si thx! – Ropstah

1

Oui, vous pouvez le faire.

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;     
    } 
} 

C'est un exemple simple. Vous pouvez utiliser différents threads pour lire la sortie et les erreurs de l'exe.

+0

Je dois lancer l'application, pas seulement lire la sortie. Merci pour l'effort cependant. +1 – Ropstah

Questions connexes