| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1357 人关注过本帖
标题:关于system.diagnostics.process.start用法求助!
只看楼主 加入收藏
liganggggg
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2009-3-9
结帖率:0
收藏
已结贴  问题点数:0 回复次数:1 
关于system.diagnostics.process.start用法求助!
使用system.diagnostics.process.start打开多个文件时,如TXT类文件可直接循环使用NOTEPAD.EXE开启多个.但有些应用程序只能默认开启一个文件,其余文件需使用软件内部开启功能才可同时开启多个文件,请问是否是线程(或进程)问题,如何解决?
搜索更多相关主题的帖子: 软件 应用程序 
2011-08-11 06:42
cphong
Rank: 2
等 级:论坛游民
帖 子:7
专家分:10
注 册:2006-6-5
收藏
得分:10 
Process.Start 方法 (ProcessStartInfo)
 
启动由包含进程启动信息(例如,要启动的进程的文件名)的参数指定的进程资源,并将该资源与新的 Process 组件关联。

命名空间:   System.Diagnostics
程序集:   System(在 System.dll 中)
语法
--------------------------------------------------------------------------------
Public Shared Function Start ( _
    startInfo As ProcessStartInfo _
) As Process

参数
startInfo
类型: System.Diagnostics.ProcessStartInfo
ProcessStartInfo,包含用于启动进程的信息(包括文件名和任何命令行参数)。

返回值
类型: System.Diagnostics.Process
与进程资源关联的新的 Process 组件;如果没有启动进程资源(例如,如果重用了现有进程),则为 Nothing。
使用此重载可通过指定 ProcessStartInfo 实例来启动进程资源。 该重载将资源与新 Process 组件关联。 如果该进程已在运行,则不启动任何其他进程资源。而是重新使用现有进程资源,并且不创建新的 Process 组件。 在这种情况下, Start 将 Nothing返回到调用过程,而不是返回新的 Process 组件。

此重载使您得以直接启动进程,而不用首先创建新 Process 实例。 将此重载与 ProcessStartInfo 参数一起使用是以下显式步骤的替代方法:创建新的 Process 实例,设置其 StartInfo 属性,并对 Process 实例调用 Start。

将 ProcessStartInfo 实例用作参数,使您得以在调用 Start 时最大限度地控制向调用中传递的、用于启动进程的内容。 如果您只需要传递一个文件名,或者需要传递一个文件名和一些参数,则不必创建新的 ProcessStartInfo 实例,虽然那也是一个选项。 必须设置的唯一 StartInfo 属性是 FileName 属性。 FileName 属性不需要表示可执行文件。 它可以是其扩展名已经与系统上安装的应用程序关联的任何文件类型。例如,如果已经将文本文件与某个编辑器(如“记事本”)关联,则 FileName 属性可以具有 .txt 扩展名;如果已经将 .doc 文件与某个字处理工具(如 Microsoft Word)关联,则它可以具有 .doc 扩展名。

您可以通过指定您最初安装 ClickOnce 应用程序的位置(例如,Web 地址)来启动该应用程序。切勿通过指定 ClickOnce 应用程序在硬盘上的安装位置来启动该应用程序。

如果设置了 StartInfo 实例的 UserName 和 Password 属性,则将调用非托管 CreateProcessWithLogonW 函数,这样,即使 CreateNoWindow 属性值为 true 或者 WindowStyle 属性值为 Hidden,也将在新窗口中启动该进程。

与其他重载不同,不带参数的 Start 重载不是 static 成员。 如果已经创建了 Process 实例,指定了启动信息(包括文件名),而且希望启动进程资源并将其与现有 Process 实例关联,则请使用该重载。 当要创建新的 Process 组件而不是启动现有组件的进程时,请使用 static 重载之一。 此重载和没有参数的重载都允许您通过使用 ProcessStartInfo 实例来为进程资源指定启动信息。

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

说明
网页和服务器控件代码在 Web 服务器上的 辅助进程的上下文中执行。如果在 网页或服务器控件中使用 Start 方法,则新进程将用有限权限在 Web 服务器上执行。 此进程不能在与客户端浏览器相同的上下文中启动,并且不能访问用户桌面。
 

每当使用 Start 启动进程时,都可能需要关闭它,否则将有丢失系统资源的危险。 使用 CloseMainWindow 或 Kill 关闭进程。

在此有必要对托管线程中的单元状态作一个说明。当 startInfo 参数上的 UseShellExecute 为 true 时,请确保您已在应用程序上设置了线程模型(通过在 main() 方法上设置 [STAThread] 属性)。 否则,托管线程可能处于 unknown 状态或进入 MTA 状态,而后一种状态会与设置为 true 的 UseShellExecute 冲突。 一些方法要求单元状态不为 unknown。 如果未显式设置状态,那么当应用程序遇到这种方法时,它默认为 MTA,而一旦进行了设置,则无法更改单元状态。 但是,当操作系统 shell 管理线程时, MTA 将导致引发异常。


[ 本帖最后由 cphong 于 2011-8-13 20:16 编辑 ]
2011-08-13 20:14
快速回复:关于system.diagnostics.process.start用法求助!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012318 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved