0

我制作了一个 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 应用程序)中从内存加载的程序集是否具有加载它的应用程序的相同权限?如果现在,我应该如何再次处理管理员权限?

4

1 回答 1

2

如果您的应用程序的大部分操作需要管理员权限,请使用

<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>

如果您的应用程序需要管理员权限来执行 1-2 项很少发生的操作,请使用 AsInvoker 权限启动并提升您的应用程序以执行该特定操作。

由于您正在读取的程序集已加载到您的进程内存中,因此它将具有与您的应用程序相同的权限。

于 2013-05-25T13:47:19.947 回答