我制作了一个WPF应用程序,它可以读取/写入其他进程的内存,大量使用注册表项,在磁盘上读/写文件以及从网站下载/部署文件。大笑不,它不是木马,不要担心:D
它已在Framework 4.5下编译,因此它通常只与Windows Vista或更高版本兼容,并且为了正常工作,它将需要管理员权限。现在......为了以透明的方式授予它所需的所有权限,我发现了各种各样的可能性。我觉得更简单的是:
1)在清单中插入以下代码:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
2)检查UAC是否已启用以及所使用的是否具有管理员权限,如果是,请询问用户是否要授予应用程序管理员权限。然后,如果答案为“是”,则使用以下命令运行提升的应用程序进程:
ProcessStartInfo.Verb = "runas";
那么...处理这个问题的最佳方法是什么?
我还有另一个问题。我的应用程序将在启动后使用以下命令从字节数组加载程序集:
Byte[] assemblyData;
using (BinaryReader reader = new BinaryReader(new FileStream(filePath, FileMode.Open)))
assemblyData = reader.ReadBytes(Convert.ToInt32(fs.Length));
Assembly assembly = Assembly.Load(assemblyData);
MethodInfo method = assembly.EntryPoint;
if (method != null)
{
Object instance = assembly.CreateInstance(method.Name);
method.Invoke(o, null);
}
我的问题是......在上面的代码片段(另一个WPF应用程序)中从内存加载的程序集是否具有加载它的应用程序的相同权限?如果现在,我应该如何再次处理管理员权限?
答案 0 :(得分:2)
如果您的应用程序需要大部分操作的管理员权限,请使用
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
如果您的应用程序需要1-2个很少发生的操作的管理员权限,那么使用AsInvoker权限启动并提升您的应用程序以进行该特定操作。
由于您正在阅读的程序集已加载到您的进程内存中,因此它将具有与您的应用程序相同的权限。