由Restart()想到的
Application.Restart Method (System.Windows.Forms) | Microsoft Docs
目录
Restart
当我们在.net Framework中使用它时,并没有什么特殊之处,是可以正常运行的,然而如果在.net core3.0时,则会抛出InvalidOperation异常。
Application.Restart();

为什么同样一个方法在会出现这样的区别呢?
探索
我们先看一下异常信息:
Process was not started by this object, so requested information cannot be determined.
此对象未启动进程,因此无法确定请求的信息。
由此我们可以大致推断:此异常是和进程启动有关。而关于进程的代码,在Restart方法中一共由两处:
if (string.Equals(str + "\\ieexec.exe", currentProcess.MainModule.FileName, StringComparison.OrdinalIgnoreCase))
{
flag = true;
ExitInternal();
string text = AppDomain.CurrentDomain.GetData("APP_LAUNCH_URL") as string;
if (text != null)
{
Process.Start(currentProcess.MainModule.FileName, text);
}
}
ProcessStartInfo startInfo = Process.GetCurrentProcess().StartInfo;
startInfo.FileName = ExecutablePath;
if (stringBuilder.Length > 0)
{
startInfo.Arguments = stringBuilder.ToString();
}
ExitInternal();
Process.Start(startInfo);
第一处代码主要是为了执行ieexec.exe,所以我们不用重点分析。
IEexec.exe应用程序是.NET Framework附带程序,存在于多个系统白名单内。可以将IEExec.exe应用程序用作主机,以运行使用URL启动的其他托管应用程序。
接下来我们看第二处代码关于进程的部分:
ProcessStartInfo startInfo = Process.GetCurrentProcess().StartInfo;
Process.Start(startInfo);
当我执行时,果然在Process.GetCurrentProcess().StartInfo出现了InvalidOperation异常,至此我们将异常范围缩小到了StartInfo属性。
.net core 3.0版
public static Process GetCurrentProcess()
{
throw null;
}
public ProcessStartInfo StartInfo
{
get
{
throw null;
}
set
{
}
}
.net Framework版
public static Process GetCurrentProcess()
{
return new Process(".", isRemoteMachine: false, Microsoft.Win32.NativeMethods.GetCurrentProcessId(), null);
}
public ProcessStartInfo StartInfo
{
get
{
if (startInfo == null)
{
startInfo = new ProcessStartInfo(this);
}
return startInfo;
}
set
{
if (value == null)
{
throw new ArgumentNullException("value");
}
startInfo = value;
}
}
结论
至此我们得出结论:在.net core3.0中,一则由于GetCurrentProcess()返回为null,二则StartInfo的get并未进行实例化,所以当后面调用StartInfo属性时无论如何都会抛出异常。
启示
.net core3.0是.net core框架中支持桌面程序的第一个大版本,存在一定的问题是正常的。但是作为一个程序员,应该以稳定性为重,不要只贪图新技术带来的快感。最后将一句老子的格言送给正在阅读的你:
我有三宝,持而守之。一曰慈、二曰俭、三曰不敢为天下先。慈固能勇;俭固能广;不敢为天下先,固能成器长。
由Restart()想到的的更多相关文章
- centos clamav杀毒软件安装配置及查杀,没想到linux下病毒比windows还多!
centos clamav杀毒软件安装配置及查杀,没想到linux下病毒比windows还多! 一.手动安装 1.下载(官网) cd /soft wget http://www.clam ...
- 由安装两块网卡的linux系统中引起网络不通想到的
由安装两块网卡的linux系统中引起网络不通想到的 一天,小王突然急匆匆的来找我,他说:"我在机子上刚装的redhat怎么老也ping不通服务器,我网卡的驱动都安装了,ping 自己的两块网 ...
- 由js apply与call方法想到的js数据类型(原始类型和引用类型)
原文地址:由js apply与call方法想到的js数据类型(原始类型和引用类型) js的call方法与apply方法的区别在于第二个参数的不同,他们都有2个参数,第一个为对象(即需要用对象a继承b, ...
- OpenGL ES 3.0: 图元重启(Primitive restart)
[TOC] 背景概述 在OpenGL绘制图形时,可能需要绘制多个并不相连的图形.这样的情况下这几个图形没法被当做一个图形来处理.也就需要多次调用 DrawArrays 或 DrawElements. ...
- 由css reset想到的深入理解margin及em的含义
由css reset想到的深入理解margin及em的含义 原文地址:http://www.ymblog.net/content_189.html 经常看到这样语句,*{ margin:0px;pad ...
- 关于点击Invalidate Caches/Restart禁止插件后,重新加载--Android Studio
1:47:27 Plugin Error Problems found loading plugins: Plugin "Google Analytics Uploader" wa ...
- 处理Assetbundle依赖关系时想到的一道题
在处理unit3d的assetbundle依赖关系的时候,想到了一道有趣的题目: 给定一堆数据,例如{A = {1, 3, 4}, B = {3, 4}, C = {5, 6}, D = {6, 7, ...
- 踢爆IT劣书出版黑幕——由清华大学出版社之《C语言入门很简单》想到的(1)
1.前言与作者 首先声明,我是由于非常偶然的机会获得<C语言入门很简单>这本书的,绝对不是买的.买这种书实在丢不起那人. 去年这书刚出版时,在CU论坛举行试读推广,我当时随口说了几句(没说 ...
- Tomcat重启脚本restart.sh停止脚本stop.sh
Tomcat重启脚本restart.sh停止脚本stop.sh Tomcat本身提供了 startup.sh(启动)shutdown.sh(关闭)脚本,我们在部署中经常会出现死进程形象,无法杀掉进程需 ...
- 由ASP.NET所谓前台调用后台、后台调用前台想到HTTP——实践篇(二)
在由ASP.NET所谓前台调用后台.后台调用前台想到HTTP——理论篇中描述了一下ASP.NET新手的三个问题及相关的HTTP协议内容,在由ASP.NET所谓前台调用后台.后台调用前台想到HTTP—— ...
随机推荐
- vue跨域请求数据
vue跨域请求数据 本篇文章基于vue-cli编写 问题描述 当出现如下关键词,证明我们正在执行跨域问题 此时证明我们违背了同源策略(即协议名.ip.端口号一致) 环境准备 首先,要想实现跨域请求数据 ...
- 多线程并发(二):聊聊AQS中的共享锁实现原理
在上一篇文章多线程并发(一)中我们通过acquire()详细地分析了AQS中的独占锁的获取流程,提到独占锁,自然少不了共享锁,所以我们这边文章就以AQS中的acquireShared()方法为例,来分 ...
- Winform程序制作安装包
记录一下Winform程序打包过程 参考文章:VS2017 WinFrom打包设置与教程 下载 Visual Studio Installer 拓展插件 从VS2017开始VS已默认不再集成Insta ...
- Vulhub 漏洞学习之:Aria2
Vulhub 漏洞学习之:Aria2 目录 Vulhub 漏洞学习之:Aria2 1 Aria2 任意文件写入漏洞 1.1 漏洞利用 1 Aria2 任意文件写入漏洞 Aria2是一个命令行下轻量级. ...
- 基于GLFW的PyOpenGL的使用
1. GLFW概述 OpenGL只是一种规范,不仅语言无关,而且平台无关.规范只字未提获得和管理OpenGL上下文相关的内容,而是将这些作为细节交给底层的窗口系统.出于同样的原因,OpenGL纯粹专注 ...
- pytorch学习笔记二之自动差分引擎
自动差分引擎¶ torch.autograd是 PyTorch 的自动差分引擎,可为神经网络训练提供支持. 1. 背景¶ 神经网络(NN)是在某些输入数据上执行的嵌套函数的集合. 这些函数 ...
- Linux命令使用时路径存在空格、特殊符号
https://blog.csdn.net/Homewm/article/details/102935965 Linux命令使用时路径存在空格.特殊符号(如-.@等等)如何处理呢? 再如可以转义的字符 ...
- PG数据库运维工具要覆盖哪些能力
目前的国产数据库中,很多产品都是以PG社区版代码作为研发起点的,还有一些产品是基于openGauss开源项目的.这些数据库的基础特性都和社区版的PG数据库类似,不过也做了一定的拓展.不过从使用与运维上 ...
- elasticsearch-8.6.1集群安装部署
elk官方下载地址:https://www.elastic.co/cn/downloads/ 1.创建普通用户及用户组 groupadd elasticsearch useradd elasticse ...
- Java异常之Error和Exception
异常Exception 实际工作中,遇到的情况不可能是非常完美的.比如:你写的某个模块,用户输入不一定符合你的要求.你的程序要打开某个文件,这个文件可能不存在或者文件格式不对,你要读取数据库的数据,数 ...