获取独立EXE的路径?

问题描述 投票:0回答:2

如果我们正在部署单文件应用程序,有没有办法从我们的代码内部获取单文件应用程序

.exe
的路径?

我问的原因是因为我有一个示例控制台应用程序,我想在注册表中注册以在每次 Windows 启动时启动,但遗憾的是每个已知的 API,如

Assembly.GetExecutingAssembly().Location
或 Microsoft 建议的 API
 AppContext.BaseDirectory
返回相对于控制台应用程序的实际
.dll
文件的路径,而不是解包它的独立
.exe
全部。

c# .net-core msbuild registry console-application
2个回答
3
投票

来自GitHub问题,@Symbai的建议:

public static class Extensions {
    [System.Runtime.InteropServices.DllImport("kernel32.dll")]
    static extern uint GetModuleFileName(IntPtr hModule, System.Text.StringBuilder lpFilename, int nSize);
    static readonly int MAX_PATH = 255;
    public static string GetExecutablePath() {
        if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(System.Runtime.InteropServices.OSPlatform.Windows)) {
            var sb = new System.Text.StringBuilder(MAX_PATH);
            GetModuleFileName(IntPtr.Zero, sb, MAX_PATH);
            return sb.ToString();
        }
        else {
            return System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
        }
    }
}

0
投票

我在将 .NET Framework WinForms 应用程序更新到 .NET 9 时遇到了这个问题。

从.NET 6开始,

Environment.ProcessPath
是获取当前运行的可执行文件的完整路径的最简单、最可靠的方法,特别是在单文件发布等场景中。

用法示例:

string exePath = Environment.ProcessPath;
string exeDir = Path.GetDirectoryName(exePath);
© www.soinside.com 2019 - 2024. All rights reserved.