【发布时间】:2010-10-18 04:30:57
【问题描述】:
我正在使用 Process.Start() 来初始化当前运行的应用程序的提升副本。不幸的是 Process.Start() 返回 null 因为它认为它正在使用我的应用程序的现有进程,并且虽然存在现有进程,但它没有指定任何处理此类入口点的方式。
.NET 中是否有任何方法(通过配置或其他方式)我可以告诉系统不要重用我的进程的现有副本?这个问题似乎只发生在 Windows XP 上,而不是 Vista 或 7。
代码副本如下:
internal static bool EnsureAssociation()
{
// Check to make sure RoketPack is associated.
if (!Protocol.IsAssociated())
{
ProcessStartInfo info = new ProcessStartInfo();
info.FileName = UNC.UniversalApplicationPath;
info.UseShellExecute = true;
if (!UAC.IsAdmin())
info.Verb = "runas"; // Provides Run as Administrator
info.Arguments = "--associate";
Process proc = null;
try
{
proc = Process.Start(info);
}
catch (Win32Exception)
{
Errors.Raise(Errors.ErrorType.ERROR_CAN_NOT_ASSOCIATE_PROTOCOL);
return false;
}
if (null != proc)
{
// Wait until the association is complete.
proc.WaitForExit();
return Protocol.IsAssociated();
}
else
{
Errors.Raise(Errors.ErrorType.ERROR_CAN_NOT_ASSOCIATE_PROTOCOL);
return false;
}
}
else
return true;
}
【问题讨论】: