gpt4 book ai didi

c# - 检测是否从已发布的独立可执行文件运行

转载 作者:行者123 更新时间:2023-11-30 15:53:43 26 4
gpt4 key购买 nike

是否有一种简单的方法来检测 .NET Core 应用程序是从系统上安装的 dotnet 运行还是从独立的发行版运行?

我正在开发一个构建自动化脚本,它需要一些关于相对路径和入口点的知识,以便使用 cli args 创建依赖进程。

我正在使用 .NET Core 并发布创建 myapp.exe 的独立应用程序。在设计和调试期间,程序使用 dotnet 命令运行,我使用以下命令使用特定的 cli args 启动另一个进程:

var filename = typeof(Program).Assembly.Location; // .../myapp.dll
var argsString = string.Join(" ", args);
var startInfo = new ProcessStartInfo
{
Arguments = filename + " " + argsString,
UseShellExecute = false,
RedirectStandardOutput = true,
FileName = "dotnet",
CreateNoWindow = false,
WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory
};

但是在独立的应用程序中,文件名应该是 FileName = "myapp.exe"Arguments = argsString。但是,属性 typeof(Program).Assembly.Location 仍然返回 myapp.dll,因为 myapp.exe 是分布式副本的包装器dotnet 包含自包含应用程序,它调用相同的 myapp.dll

在不知道从哪里运行的情况下,我需要在每次发布应用程序时更改参数,这会大大减慢开发速度并使构建自动化变得更加困难。

是否有一种“正常”的方式——即由具有某些属性或方法的框架支持——检测此问题的方法,而不检查工作目录中是否存在 myapp.exe 或其他启发式方法?

最佳答案

看起来 Assembly.GetEntryAssembly() 已重定向到您的 .dll,但您应该能够看到带有 Process 的真实可执行文件。例如

System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName

这更像是一个操作系统级别的 API。

关于c# - 检测是否从已发布的独立可执行文件运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51912246/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com