2008-08-25 10 views
4

Das Compact Framework unterstützt Assembly.GetEntryAssembly nicht zum Ermitteln der startenden EXE. Gibt es eine andere Möglichkeit, den Namen der ausführenden .exe zu erhalten?Wie kann ich den Namen der ausführenden .exe erhalten?

EDIT: Ich fand die Antwort auf Peter Fuß Blog: http://peterfoot.net/default.aspx Hier ist der Code:

byte[] buffer = new byte[MAX_PATH * 2]; 

int chars = GetModuleFileName(IntPtr.Zero, buffer, MAX_PATH); 

if (chars > 0) 

{ 

string assemblyPath = System.Text.Encoding.Unicode.GetString(buffer, 0, chars * 2); 

} 

[DllImport("coredll.dll", SetLastError = true)] 

private static extern int GetModuleFileName(IntPtr hModule, byte[] lpFilename, int nSize); 
+0

in CF2: Zeichenfolge s = System.IO.Path.GetFileName (System.Reflection.Assembly.GetExecutingAssembly(). GetName(). CodeBase); – josef

Antwort

4

Ich bin nicht sicher, ob es aus verwaltetem Code (oder auch der kompakte Rahmen) funktioniert, aber in Win32 Sie können GetModuleFileName aufrufen, um die ausführbare Datei zu finden.

MSDN: GetModuleFileName

1
string exefile = Assembly.GetExecutingAssembly().GetName().CodeBase; 

Aber wenn man es in einer DLL-Versammlung gesagt, ich glaube, es wird geben Sie den Namen der Assemblierungsdatei an.

Derselbe Aufruf des Frameworks "Full" würde die .exe-Datei mit dem Präfix "file: \" zurückgeben.