Process.CloseMainWindow Method

通过向进程的主窗口发送关闭消息来关闭拥有用户界面的进程。

注解

进程执行时,其消息循环处于等待状态。 每次操作系统将 Windows 消息发送到该进程时,消息循环都会执行。 调用CloseMainWindow将发送一个请求来关闭主窗口,该窗口在格式正确的应用程序中将关闭子窗口,并为应用程序撤消所有正在运行的消息循环。 通过调用CloseMainWindow退出进程的请求不会强制应用程序退出。 应用程序可以在退出前要求用户进行验证,也可以拒绝退出。 若要强制退出应用程序,请使用Kill方法。 的行为与CloseMainWindow用户使用系统菜单关闭应用程序的主窗口的行为相同。 因此,通过关闭主窗口来退出进程的请求不会强制立即退出。

如果调用Kill,则由进程编辑的数据或分配给进程的资源可能会丢失。 Kill导致异常的进程终止,只应在必要时使用。 CloseMainWindow启用进程的有序终止,并关闭所有窗口,因此更适合使用接口的应用程序。 如果CloseMainWindow失败,可使用Kill终止进程。 Kill是终止没有图形界面的进程的唯一方法。

只能为在Kill本地CloseMainWindow计算机上运行的进程调用和。 不能使远程计算机上的进程退出。 只能查看远程计算机上运行的进程的信息。

----------------------------------------------------------------

Process.Start Method

启动进程资源并将其与 Process 组件关联。

地址:https://docs.microsoft.com/zh-cn/dotnet/api/system.diagnostics.process.start?view=netframework-4.8

注解

使用此重载来启动进程资源,并将其与当前Process组件相关联。 返回值true指示已启动新的进程资源。 如果该FileName StartInfo属性的成员指定的进程资源已在计算机上运行,则不会启动其他进程资源。 相反,将重用正在运行的进程资源false并返回。

可以通过指定最初安装应用程序的位置(例如,Web 地址)来启动 ClickOnce 应用程序。 不要通过在硬盘驱动器上指定其安装位置来启动 ClickOnce 应用程序。

备注

如果使用的是 Visual Studio,则Start方法的此重载是在Process将组件拖到设计器上后插入到代码中的方法。 使用窗口展开类别,并将适当FileName的值写入属性。 StartInfo Properties 您所做的更改将显示在InitializeComponent窗体的过程中。

Start此重载static不是方法。 必须从Process类的实例调用它。 在调用Start之前,必须首先指定StartInfoProcess实例的属性信息,因为该信息用于确定要启动的进程资源。

Start方法的其他重载是static成员。 在调用方法的重载之前,无需创建Process组件的实例。 相反,你可以Start Process为类本身调用,并在进程启动Process时创建新的组件。 如果重用null了进程,则返回或。 进程资源与Process Start方法返回的新组件自动关联。

成员可用于复制 Windows Start菜单Run对话框的功能。 StartInfo 可以通过在StartInfo属性中设置相应的值来启动可键入到命令行中的任何内容。 必须设置StartInfo的唯一属性FileName是属性。 FileName属性不必是可执行文件。 它可以是其扩展插件与系统上安装的应用程序关联的任何文件类型。 例如,如果您FileName已将文本文件与一个编辑器(如记事本)关联,则该属性可以具有 .txt 扩展名; 如果您已将 .doc 文件与 word 处理工具(如 Microsoft word)关联,则该属性可能具有 .doc 扩展名。

在命令行中,可以指定要对某些类型的文件执行的操作。 例如,可以打印文档或编辑文本文件。 使用Verb StartInfo属性的成员指定这些操作。 对于其他类型的文件,您可以在从Run对话框启动文件时指定命令行参数。 例如,如果将浏览器指定为FileName,则可以将 URL 作为参数传递。 可以在StartInfo Arguments属性成员中指定这些参数。

如果在系统中使用引号声明了路径变量,则在启动在该位置找到的任何进程时必须完全限定该路径。 否则,系统将找不到该路径。 例如,如果c:\mypath不在你的路径中,且你使用引号添加它: path = %path%;"c:\mypath",则在启动时,你必须完全c:\mypath限定中的任何进程。

备注

ASP.NET 网页和服务器控制代码在 Web 服务器上的 ASP.NET 工作进程上下文中执行。 如果在 ASP.NET 网页Start或服务器控件中使用方法,则新进程将在具有受限权限的 Web 服务器上执行。 该进程不会在与客户端浏览器相同的上下文中启动,也不能访问用户桌面。

当你使用Start启动某个进程时,你可能需要将其关闭或丢失系统资源的风险。 使用CloseMainWindowKill关闭进程。 您可以使用其HasExited属性来检查进程是否已关闭。

此处需要有关托管线程中的单元状态的说明。 UseShellExecute位于StartInfo main()进程组件的属性上时,请确保已通过设置方法上的属性[STAThread]设置了应用程序的线程模型。 true 否则,托管unknown线程可以处于状态或MTA处于状态,后者与UseShellExecute true发生冲突。 某些方法要求单元状态不为unknown如果未显式设置状态,则当应用程序遇到此类方法时,它默认为MTA,一旦设置,将无法更改单元状态。 但是, MTA当操作系统 shell 管理线程时,将导致引发异常。

-----------------------------------------------

文章:C#中[STAThread]的作用

线程模型:线程模型是单线程单元

是一种线程模型,用在程序的入口方法上(在C#和VB.NET里是Main()方法),来指定当前线程的ApartmentState 是STA。

--------

文章:.NET中STAThread和MTAThread

组件对象的公寓模型只与创建该对象的线程有关

创建组件对象应该在程序的主线程上,比如Main方法入口的地方,这样才能保证组件对象的公寓模型;

01-14 19:14
查看更多