Compact Framework не поддерживает Assembly.GetEntryAssembly для определения запускаемого .exe. Так есть ли другой способ получить имя исполняемого .exe?
Обновлено: Я нашел ответ в блоге Питера Фута: http://peterfoot.net/default.aspx Вот код:
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);





Я не уверен, работает ли он из управляемого кода (или даже из компактной платформы), но в Win32 вы можете вызвать GetModuleFileName, чтобы найти работающий exe-файл.
В управляемом коде, я думаю, вы можете использовать это: http://msdn.microsoft.com/en-us/library/system.windows.forms.application.executablepath.aspx
Application.ExecutablePath
Обратите внимание, что это решение предназначено только для клиентского приложения Windows. Если это консоль или служба Windows, объекта Application не будет.
string exefile = Assembly.GetExecutingAssembly().GetName().CodeBase;
Но если вы поместите его в сборку DLL, я считаю, что он даст вам имя файла сборки.
Тот же вызов в среде «Full» вернет файл .exe с префиксом «file: \».
в CF2: строка s = System.IO.Path.GetFileName (System.Reflection.Assembly.GetExe cutingAssembly (). Get Name (). CodeBase);