Ton*_*Nam 0 c# privileges compatibility process
我有一个文件MyUtilities.exe
.
当我跑:
Process.Start("MyUtilities.exe","SomeParameter");
如果在没有管理员权限的情况下运行,则该进程的退出代码为0(OK).如果我以管理员身份运行该代码,退出代码为1!
由于我没有创建MyUtilities.exe
我无法修改它.
最后我需要以Process.Start("MyUtilities.exe","SomeParameter");
管理员身份运行并让它返回退出代码= 0.我设法做到这一点的方法是将其兼容性更改为:
(右键单击文件 - >属性 - >兼容性 - >以管理员身份运行此程序)
在更改之后,我现在能够以Process.Start("MyUtilities.exe","SomeParameter");
管理员身份运行并返回退出代码0.
所以我的问题是如何更改该文件与代码的兼容性,这样我就不必告诉用户右键单击该文件然后更改设置.
这看起来很简单.只需向注册表添加一个值即可.
关键:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
- 或 -HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
名称: f:\ull\path\to\executable.exe
值: RUNASADMIN
以下是您在代码中执行此操作的方法.如果您写入HKCU,则呼叫过程不需要以管理员身份运行.
static void SetRunAsAdmin(string exeFilePath)
{
var key = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers", true);
if (key == null)
throw new InvalidOperationException(@"Cannot open registry key HKCU\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers.");
using (key)
key.SetValue(exeFilePath, "RUNASADMIN");
}
Run Code Online (Sandbox Code Playgroud)