Я использую 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;
}