我基本上只想在可能的情况下要求管理员,但即使他拒绝/没有权限以管理员身份运行程序,我仍然继续运行该程序
答案 0 :(得分:4)
在Windows中,某个进程在启动时升高,或者没有启动。没有回旋的余地。用户拒绝高程提示意味着该过程将完全无法启动。
因此,执行此操作的唯一方法是将您的应用程序分发为多个单独的程序,其中所有管理任务都集中在可以在单独进程中运行的其他exe文件中。然后,当您需要以管理员身份进行活动时,可以使用适当的信息启动该程序。命令行参数,磁盘上的文件,通过网络或IPC的文件都可以使用。用户将看到新流程的提示并批准或拒绝它,您可以通过在应用程序首次成功启动时采取一些可见的操作来检测拒绝状态。
当然,您仍然希望像普通用户一样尝试尽可能多的工作。例如,遍历文件系统仍然可以作为普通用户使用;您只是看不到某些文件夹。这并不一定意味着复制代码。您可以将代码放入类库(dll)中,并从主(非特权)进程中将其启动为与from特权子进程相同的类库。
答案 1 :(得分:0)
除了通过requestedExecutionLevel
强制用户以管理员身份运行之外,您还可以使用WindowsPrincipal.IsInRole
在运行时进行检查。
根据用户访问级别,可以启用/禁用某些功能。并且,您还可以提醒用户,他可以以管理员身份重新启动应用程序(右键单击>以管理员身份运行)以在启动时或在显示禁用的功能时启用某些功能。