Process.Start 方法 (String, String, SecureString, String)

      
 /// <summary>
        
/// 将程序重新启动
        
/// </summary>
        
/// <param name="appName">程序的名称</param>
        
/// <param name="filepath">程序的路径</param>
        
/// <param name="admin">管理员名称</param>
        
/// <param name="password">管理员密码</param>
        
/// <param name="domain">域名称</param>
        
/// <returns>是否已经启动</returns>

        public static bool IsReStartApp(string appName,string filepath,string admin,string password,string domain)
        
{
            appName 
= appName.ToUpper();
            
if (IsAppExist(appName))
                
return true;
            SecureString ses 
= new SecureString();
            
foreach (char c in password)
            
{
                ses.AppendChar(c);
            }

            Process.Start(filepath, admin, ses, domain);
            
return true;
        }
在Form中没有什么问题,使用WebService实现就出现问题了:以下是引用:http://msdn2.microsoft.com/zh-cn/library/0w4h05yb(VS.80).aspx的内容
Process.Start 方法 (ProcessStartInfo)
启动由包含进程启动信息(例如,要启动的进程的文件名)的参数指定的进程资源,并将该资源与新的 Process 组件关联。
命名空间: System.Diagnostics
程序集: System(在 system.dll 中)
public static Process Start (
ProcessStartInfo startInfo
)
参数
startInfo ProcessStartInfo,包含用于启动进程的信息(包括文件名和任何命令行参数)。 
返回值
与进程资源关联的新的 Process 组件,或者如果没有启动进程资源(例如,如果重用了现有进程),则为 空引用
(在 Visual Basic 中为 Nothing)。
异常
异常类型条件

InvalidOperationException

startInfo 参数的 FileName 属性中未指定任何文件名。

- 或 -

startInfo 参数的 UseShellExecute 属性为 true,而 RedirectStandardInputRedirectStandardOutputRedirectStandardError 属性也为 true

- 或 -

startInfo 参数的 UseShellExecute 属性为 true,而 UserName 属性不为 空引用(在 Visual Basic 中为 Nothing) 或空,或者 Password 属性不为 空引用(在 Visual Basic 中为 Nothing)。

ArgumentNullException

startInfo 参数为 空引用(在 Visual Basic 中为 Nothing)。

Win32Exception

打开关联的文件时发生了错误。

ObjectDisposedException

该进程对象已被释放。

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

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

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

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

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

说明注意:

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

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

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

红色的地方是让人伤心的地方,也是原因所在!!!!

posted on 2007-07-29 09:42  星星博客园  阅读(1327)  评论(0编辑  收藏  举报

导航

立即注册PayPal并开始接受信用卡付款。