Ausführen eines Programms mit System.Diagnostics.Process.Start eine Missing verursacht
-
29-09-2019 - |
Frage
Ich arbeite an einem Compact Framework 2.0-Projekt, und ich versuche, ein Programm „B“, um aus einem anderen Programm „A“ mit Process.Start. Ich habe dies mehrere Male zuvor getan, aber ich bin in einige seltsame Fragen rund um diese Zeit.
Programm „B“ tut Start, aber es verursacht eine Missing, sagte mir im Grunde, dass es eine bestimmte Baugruppe fehlt, dass sie verwiesen hat. Das Problem ist, dass die Montage DLL genau dort ist, im selben Ordner wie Programm „B“. Wenn ich einen Doppelklick auf Programm „B“, läuft es richtig ohne Missing, ist es nur, wenn sie mit Process.Start in Programm „A“ ins Leben gerufen, dass dieses Problem auftritt. Ich habe absolut keine Ahnung, was hier los ist. Ich versuchte, die Working Eigenschaft ohne Glück zu setzen. Irgendwelche Ideen, warum das Programm kann seine Referenzen nicht geladen werden, wenn sie durch Process.Start ausgeführt? Dank
System.Diagnostics.Process proc = new System.Diagnostics.Process();
ProcessStartInfo startInfo = new ProcessStartInfo(programBFullPath, "argument");
//I've been changing these two properties, have tried shell execute with both false and true, tried setting working directory and not setting it also
startInfo.UseShellExecute = false;
startInfo.WorkingDirectory = programBDirectory;
proc.StartInfo = startInfo;
proc.Start();
EDIT Ich dachte nur an etwas ... Beide Programm "A" und das Programm "B" verwenden, um die DLL das Programm "B" nicht geladen ist. Wenn zwei Programme nicht die gleiche DLL zur gleichen Zeit geladen werden können, dann ist das das Problem. Ist dies der Fall ist?
Lösung 2
Nun habe ich es arbeiten, indem sie die referenzierte Code Duplizierung auf Assembly Programm B und alle Verweise zu entfernen. Es ist bei weitem nicht elegant, aber ich konnte es nicht auf andere Weise zu arbeiten. Wenn jemand eine Idee hat, was möglicherweise schief gegangen haben würde ich es sehr schätzen. Es könnte sich als nützlich ein andermal kommen. Dank
Andere Tipps
Wie funktioniert Speicherdruck Blick auf das Gerät? Wenn das Programm B auf Assembly C beruht, aber es gibt nicht genügend Arbeitsspeicher (virtuellen oder physischen) Baugruppe C zu laden, dann werden Sie eine Missing bekommen (statt eines OutOfMemoryException, die ich immer gedacht, würde mehr Sinn machen).