Pergunta

O Compact Framework não oferece suporte a Assembly.GetEntryAssembly para determinar o .exe de inicialização.Então, há outra maneira de obter o nome do .exe em execução?

EDITAR:Encontrei a resposta no blog de Peter Foot: http://peterfoot.net/default.aspxAqui está o código:

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);
Foi útil?

Solução

Não tenho certeza se funciona a partir de código gerenciado (ou mesmo de estrutura compacta), mas no Win32 você pode chamar GetModuleFileName para encontrar o arquivo exe em execução.

MSDN:ObterModuleFileName

Outras dicas

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

Mas se você colocá-lo em um assembly DLL, acredito que ele lhe dará o nome do arquivo assembly.

A mesma chamada na estrutura "Full" retornaria o arquivo .exe com um prefixo "file:\".

No código gerenciado, acho que você pode usar isto:http://msdn.microsoft.com/en-us/library/system.windows.forms.application.executablepath.aspx

Aplicativo.ExecutablePath

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top