Wie Sie eine 32-bit-Prozess in C# ohne die Verwendung von shell ausführen, die auf 64-bit-Maschine?

Ich habe eine ASP .NET web-Anwendung auf einem 64-bit-Maschine, die laufen muss ein legacy-32-bit-reporting-Anwendung.

Wenn ich das Programm mit UseShellExecute = false, das Programm beendet sich mit exit code:

-1073741502

Kann ich nicht verwenden, Shell Ausführen, weil ich den Prozess als ein anderer Benutzer. Doch, bei Shell-Execute true ist, ist der Prozess gut laufen (obwohl ich den Benutzer ändern, dass die ASP .NET ist die Ausführung unter).

Wie kann ich das starten dieser 32-bit-Programm mit C# ohne shell?

Hier ist der code habe ich jetzt:

var pxs = new ProcessStartInfo
{
    Arguments = arguments,
    CreateNoWindow = true,
    Domain = ConfigurationManager.AppSettings["reportUserDomain"],
    UserName = ConfigurationManager.AppSettings["reportUserName"],
    Password = GetSecureString(ConfigurationManager.AppSettings["reportUserPassword"]),
    LoadUserProfile = true,
    FileName = ConfigurationManager.AppSettings["reportRuntime"],
    UseShellExecute = false             

};

var px = new Process
{
    StartInfo = pxs
};

px.Start();
px.WaitForExit();
  • Sie betonen, dass dies eine 32-bit-Prozess. Ist das, weil es funktioniert gut für die 64-bit-Prozesse?
  • Das starten eines Prozesses von einer 64-bit-Anwendung nicht bestimmen, dass das Kind die app wird in 64-bit. Das Kind app ist ein separater Prozess, und es ist der 32/64-Bitanzahl ist bestimmt die gleiche Weise jedes andere Programm bestimmt wird. .Net-Anwendungen, die nicht explizit kompiliert entweder 64-oder 32-native zu den OS. Ein 64-bit OS läuft es als 64 bit -, sondern ein 32-bit OS mit 32 bit ausgeführt.
  • Wenn ASP.NET läuft als LocalSystem-Konto die Funktion aufrufen, um CreateProcessWithLogonW (verwendet behing die Szenen) wird scheitern: msdn.microsoft.com/en-us/library/ms682431(VS.85).aspx
  • In der Antwort auf Ihre erste Frage, ich habe nicht versucht, starten Sie eine 64-bit-Prozess in diesem Zusammenhang (vor allem, weil ich nicht haben müssen), obwohl ich erfolgreich gestarteten Prozesse mit ShellExecute = false in der Vergangenheit. Also, ich weiß nicht, ob es funktionieren würde gut für einen 64-bit Prozess, aber ich würde davon ausgehen, es würde.
  • eine endgültige Lösung mit full-source-code-Beispiel funktioniert es ?
InformationsquelleAutor Ryan | 2011-04-28
Schreibe einen Kommentar