2008-08-25 11 views
4

Compact Framework ne prend pas en charge Assembly.GetEntryAssembly pour déterminer le fichier .exe de lancement. Donc, y a-t-il un autre moyen d'obtenir le nom de l'exécutable .exe?Comment puis-je obtenir le nom de l'exécutable .exe?

EDIT: J'ai trouvé la réponse sur le blog de Peter Foot: http://peterfoot.net/default.aspx Voici le 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

dans CF2: chaîne s = System.IO.Path.GetFileName (System.Reflection.Assembly.GetExecutingAssembly(). GetName(). CodeBase); – josef

Répondre

4

Je ne suis pas sûr que cela fonctionne à partir du code managé (ou même le cadre compact), mais dans Win32 vous pouvez appeler GetModuleFileName pour trouver le fichier exe en cours d'exécution.

MSDN: GetModuleFileName

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

Mais si vous le mettez dans un ensemble de DLL, je crois qu'il vous donne le nom du fichier d'assemblage.

Le même appel sur le cadre «complet» retournerait le fichier .exe avec un préfixe «fichier: \».

Questions connexes