c#-检测是否从已发布的自包含可执行文件运行
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-检测是否从已发布的自包含可执行文件运行,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1310字,纯文字阅读大概需要2分钟。
内容图文
![c#-检测是否从已发布的自包含可执行文件运行](/upload/InfoBanner/zyjiaocheng/669/446047201d4a4f3f82478df086bb7a93.jpg)
有没有一种简单的方法来检测.NET Core应用程序是从系统上安装的dotnet还是自包含发行版中运行?
我正在构建自动化脚本,该脚本需要一些有关相对路径和入口点的知识,以便使用cli args创建依赖进程.
我正在使用.NET Core并发布创建myapp.exe的自包含应用程序.在设计和调试期间,该程序使用dotnet命令运行,我使用以下命令通过特定的cli arg启动另一个进程:
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”,参数应为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#-检测是否从已发布的自包含可执行文件运行全部内容,希望文章能够帮你解决c#-检测是否从已发布的自包含可执行文件运行所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。