4

Compact Framework 不支持通过 Assembly.GetEntryAssembly 确定启动 .exe。那么是否有另一种方法来获取正在执行的 .exe 的名称?

编辑:我在 Peter Foot 的博客上找到了答案: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);
4

3 回答 3

4

我不确定它是否适用于托管代码(甚至是紧凑框架),但在 Win32 中,您可以调用 GetModuleFileName 来查找正在运行的 exe 文件。

MSDN:获取模块文件名

于 2008-08-25T12:56:35.267 回答
1
string exefile = Assembly.GetExecutingAssembly().GetName().CodeBase;

但是如果你把它放在一个DLL程序集中,我相信它会给你程序集文件名。

The same call on the "Full" framework would return the .exe file with a "file:\" prefix.

于 2008-09-22T20:53:05.643 回答
0

在托管代码中,我认为您可以使用它:http: //msdn.microsoft.com/en-us/library/system.windows.forms.application.executablepath.aspx

Application.ExecutablePath

于 2008-08-25T12:59:02.063 回答