2016-06-02 22 views
0

Ich habe zwei Projekte unter der gleichen Lösung erstellt. ProjectA ist eine Windows Form Application und ProjectB ist eine einfache Konsolenanwendung. ProjectB wird von ProjectA mit Administratorrechten ausgeführt.
Probe von ProjectAFühren Sie eine andere EXE aus einer Anwendung mit Parametern, wie admin

private void btnFinish_Click(object sender, EventArgs e) 
     { 
      ipAddress = txtIP.Text; 
      bindingPort = txtPort.Text; 
      if (!fileChosen) 
      { 
       CreateCertificate(); 
       // 
      } 
      //After this step i want to execute ProjectB with admin provileges with 3 parameters 
      ExecuteB_AsAdminWithPrivileges(ipAddress, bindingPort, serverCert); 
     } 
    } 

Also, wenn ich auf die Schaltfläche Fertig Namen klicken i die ProjectB.exe wollen mit den Parametern ausgeführt werden, die ich von ProjectA geben.
Und ProjectB sieht etw mag:

public static void StoreAndBindCertificate(string pfxFileServerCert, string ipAddress, string ipPort) 
     { 
// 
} 

Dies ist die Methode, die die Parameter von ProjectA verwenden werden.
Wie kann ich die Parameter von ProjectA zu dieser Methode in ProjectB abrufen?

Antwort

0

Sie diese Methode verwenden könnte:

public static int RunProcessAsAdmin(string exeName, string parameters) 
{ 
    try { 
     System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo(); 
     startInfo.UseShellExecute = true; 
     startInfo.WorkingDirectory = CurrentDirectory; 
     startInfo.FileName = Path.Combine(CurrentDirectory, exeName); 
     startInfo.Verb = "runas"; 
     //MLHIDE 
     startInfo.Arguments = parameters; 
     startInfo.ErrorDialog = true; 

     Process process = System.Diagnostics.Process.Start(startInfo); 
     process.WaitForExit(); 
     return process.ExitCode; 
    } catch (Win32Exception ex) { 
     WriteLog(ex); 
     switch (ex.NativeErrorCode) { 
      case 1223: 
       return ex.NativeErrorCode; 
      default: 
       return ErrorReturnInteger; 
     } 

    } catch (Exception ex) { 
     WriteLog(ex); 
     return ErrorReturnInteger; 
    } 
} 

Der erste Parameter wird Ihre Sie .exe-Datei und die zweite wird sein, die Parameter Ich möchte Ihre .exe DateigebenDanach sollten Sie Änderungen in Ihrer .exe-Datei im Abschnitt main vornehmen. Etwas wie:

Ich hoffe, das hilft.

1

aktualisieren

ProgramA{ 
string ip ="123.123.123"; 
File.WriteAllText("c://MtDataFromA.txt","ip="+ip); 
} 


private void btnFinish_Click(object sender, EventArgs e) 
      { 
       ipAddress = File.WriteAllText("c://MtDataFromA.txt");//some algorithem to find the ip from text file 

    } 


public static void StoreAndBindCertificate(string pfxFileServerCert, string ipAddress, string ipPort){ 


     // Use ProcessStartInfo class 
     ProcessStartInfo startInfo = new ProcessStartInfo(); 
     startInfo.CreateNoWindow = false; 
     startInfo.UseShellExecute = false; 
     startInfo.FileName = "YourFile.exe"; 
     startInfo.WindowStyle = ProcessWindowStyle.Hidden; 
     startInfo.Arguments = "ipAddress"+" " +"ipPort"; 

     try 
     { 
      // Start the process with the info we specified. 
      // Call WaitForExit and then the using statement will close. 
      using (Process exeProcess = Process.Start(startInfo)) 
      { 
       exeProcess.WaitForExit(); 
      } 
     } 
catch 
     { 
      // Log error. 
     } 
} 

link

+0

In diesem Fall bedeutet, dass ich hier bereits die Parameter ipAddress und ipPort haben. Meine Frage ist, wie kann ich diese beiden Parameter aus dem anderen Projekt bekommen und sie hier verwenden? – drgmak

+0

Diese Methode StoreAndBindCertificate gehört zum ProjectB-Namespace. Also, ich möchte diese ProjectB.exe als Admin von ProjectA ausführen – drgmak

+0

Ok, Sie können Ihre Daten wie ipPort und ipAdress in einer Textdatei in einem Ordner speichern, wenn ProjectA ausgeführt wird und dann lesen Sie es einfach aus der Datei, die Sie in diesem erstellt haben Funktion. –