Как получить доступ к rstrui.exe из кода позади?
Пожалуйста, скажите мне, как я могу получить доступ к восстановлению системы "rstrui.exe" из моего кода C#.
Я попробовал позвонив C:\Windows\System32\rstrui.exe
; Но это не доступно вообще.
Мне нужно вызвать эту функцию для перенаправления моих элементов управления на восстановление системы.
Спасибо....
1 ответ
Я запускаю все это на 64-битной системе, но все равно ничего не работает. Итак, мне удалось решить эту проблему:
IntPtr wow64Value = IntPtr.Zero;
try
{
Wow64Interop.DisableWow64FSRedirection(ref wow64Value);
ProcessStartInfo psi1 =
new ProcessStartInfo("cmd.exe");
psi1.UseShellExecute = false;
psi1.RedirectStandardOutput = true;
psi1.RedirectStandardInput = true;
psi1.CreateNoWindow = true;
psi1.Verb = "runas";
Process ps1 = Process.Start(psi1);
ps1.EnableRaisingEvents = true;
StreamWriter inputWrite1 = ps1.StandardInput;
// uses extra cheap logging facility
inputWrite1.WriteLine("chcp 437");
inputWrite1.WriteLine("rstrui.exe");
}
catch (Exception ex)
{
Console.WriteLine("Unabled to disable/enable WOW64 File System Redirection");
Console.WriteLine(ex.Message);
}
finally
{
// 3. Let the Wow64FSRedirection with its initially state
Wow64Interop.Wow64RevertWow64FsRedirection(wow64Value);
}
Чтобы включить его:
public class Wow64Interop
{
const string Kernel32dll = "Kernel32.Dll";
[DllImport(Kernel32dll, EntryPoint = "Wow64DisableWow64FsRedirection")]
public static extern bool DisableWow64FSRedirection(ref IntPtr ptr);
[DllImport(Kernel32dll, EntryPoint = "Wow64RevertWow64FsRedirection")]
public static extern bool Wow64RevertWow64FsRedirection(IntPtr ptr);
}
Вы можете получить доступ к C:\Windows\System32, используя следующее свойство:
Environment.SystemDirectory
Свойство Environment.SystemDirectory
Вы можете запустить исполняемый файл, используя следующий метод:
Process.Start(Path.Combine(Environment.SystemDirectory, "rstrui.exe"));
ОБНОВЛЕНИЕ >>>
Аааа... теперь я вижу твою проблему.
При доступе к System32
папка из 32-битного кода на 64-битных Windows 7 и Vista (может быть, Windows 8 тоже), Windows "умно" изменяет эту часть пути запроса на SysWow64
, Вот почему вы можете получить ошибку "Не удалось найти путь". Чтобы обойти это, вы можете использовать следующее:
Process.Start(@"C:\Windows\SysNative\rstrui.exe");
Более полный ответ может быть:
if (Environment.Is64BitProcess)
{
Process.Start(Path.Combine(Environment.SystemDirectory, "rstrui.exe"));
}
else Process.Start("C:\\Windows\\sysnative\\rstrui.exe");