我在C#中有一个winforms应用程序,需要对某些表单进行访问控制。这意味着,应用程序在系统启动时在相同(默认)用户下运行,但某些表单需要受到保护,因此只有某些Windows用户在使用用户名和密码识别自己后才能访问其他功能。对于该步骤,应使用Windows身份验证。
现在是棘手的部分。虽然应用程序是在“普通”用户下启动的,但我希望超级用户“登录”到特殊表单而不重新启动entiere应用程序。
我现在的问题是。这是可能的(即使用管理员的凭据创建一个线程)。或者我是否需要为此设置另一个应用程序域?
请给我一个暗示,正在运行的应用程序的用户可以以某种方式进行更改。
谢谢。
修改
我用“某些用户”替换了管理员,因为特权用户可能只是另一个通过安装配置被授予访问特殊功能的普通用户。
答案 0 :(得分:1)
您必须将需要提升权限的表单或功能放入以提升权限启动的新AppDomain中。您可以在需要时创建一次域名并保留它。在这个新的AppDomain中,您将加载必要的代码模块,其中包含您需要运行的进程。您必须跨AppDomain边界传递任何必要的状态或配置,因为它在您当前进程中基本上是一个不同的进程。好处是你可以在一段时间后保持AppDomain。它不像一个线程在完成后运行并消失,因此您可以在以后按需使用它来执行其他任务。神奇之处在于如何将凭据或证据传递给新的AppDomain(或进程)。
答案 1 :(得分:0)
只是为了确保,您基本上只有在执行需要所述权限的操作时才将您的流程提升为管理员权限?
如果是这样的话,似乎不可能。 See here.
执行所需操作的一种方法是在主程序集中使用控制台参数来执行您需要执行的每个操作。例如,要更改系统设置,您可以使用参数“Process.Start
”-change {...}
主程序集,并在管理员权限下运行,同时使当前正在运行的进程保持当前用户的权限。
答案 2 :(得分:0)
我刚发现一篇关于“模仿”的文章。目前我还没有对它进行测试,但根据this文章,方法调用可以在另一个用户下执行。也许这对某人有所帮助。