2010-10-10 68 views
1

我有一个C#的winforms应用程序需要访问控制某些形式。这意味着,应用程序在系统启动时以相同(默认)用户运行,但某些表单需要进行保护,以便只有特定的Windows用户在使用用户名和密码标识自己后才能访问附加功能。对于那一步,应该使用Windows身份验证。多用户登录到winforms应用程序

现在棘手的部分。虽然应用程序是在“普通”用户下启动的,但我希望超级用户在不重新启动entiere应用程序的情况下“登录”到特殊表单中。

我现在的问题是。这是否可能(即使用管理员的凭据创建一个线程)。或者我需要为此设置另一个AppDomain?

请给我一个提示水灰比正在运行的应用程序的用户可以以某种方式改变。

谢谢。

编辑

我代替管理员通过“特定用户”,因为特权用户可能只是由安装的配置授予访问特殊功能的另一个普通用户。

回答

1

你必须把需要提升的权限到相应地开始使用提升的权限一个新的AppDomain的形式或功能。您可以在需要时创建一次域名并保留它。在这个新的AppDomain中,您将加载必要的代码模块,其中将包含您需要运行的进程。您必须跨AppDomain边界传递任何必需的状态或配置,因为它实际上是当前进程中的一个不同进程。好的是你可以在一段时间后保留AppDomain。它不像一个运行完毕的线程,因此您可以稍后使用它来执行其他任务。神奇的是你如何将证书或证据传递给新的AppDomain(或进程)。

+0

就通信而言,AppDomain是否已经通过远程处理与主机进程通信?或者至少这是.net 2.0的情况。问题是,有什么方法可以传递一些数据..? – dexter 2011-01-12 19:59:12

+0

是的。它们都在同一个进程中,但与父AppDomain隔离。因此,通过不同进程传递的相同限制适用于在AppDomain之间传递数据。幸运的是,现在有更多选择:.NET 3.5添加了命名管道,现在4.0支持内存映射文件。 – 2011-02-01 18:38:16

+0

一个典型的场景就像Windows任务管理器(在Vista下),当您单击“显示所有任务”时,它会使用管理员证书/证据在新流程中实际重新启动,然后终止非管理员应用程序。 – 2011-02-01 18:40:17

0

只是为了确保,你基本上只希望当执行需要说的权利行动,以你的进程提升到管理员权限?

如果是这样的话,现在看来似乎是不可能的。做你想做什么See here.

一种方法是使用控制台参数在主装配每个你需要做的动作。例如,要更改系统设置,您可以使用参数“-change {...}”代替Process.Start您的主程序集,并在管理员权限下运行该程序集,同时使当前正在运行的进程保持当前用户的权限。

0

我刚刚发现关于“假冒”的文章。目前我还没有测试过,但根据this文章,它应该工作,方法调用可以在另一个用户下执行。也许这对某人有帮助。

相关问题