2009-12-10 49 views
5

我有一个我正在开发的WinForms应用程序。有一小部分功能需要在Vista/Win7中以管理员身份运行。我了解如何为清单中的应用程序设置requestedExecutionLevel。诀窍是,我不想要求用户以管理员身份运行整个应用程序,只是其中的一部分。所以我想将大部分功能作为Invoker运行。一个dll的请求执行级别

如果我把管理功能放在一个dll中,有没有办法将它标记为requireAdministrator?我试图用MT来为dll添加一个清单,但这似乎不起作用。我需要做什么?

回答

4

不,没有办法通过DLL来区分DLL上应用程序的执行级别。这是一个全过程设置。您必须调用应用程序中的另一个进程,以高级priv方式运行该DLL中的代码。

尽管你有一个选择是使用rundll或rundll32程序直接运行DLL。这是一个独立的Windows程序,用于加载和运行特定的DLL。你可以提升rundll进程并获得你想要的隔离。

谷歌搜索rundll会给你很多关于如何使用它的建议:)。

+0

一个DLL可以作为自己的进程执行还是必须从EXE启动? – epotter 2009-12-10 18:31:21

+0

@epotter我在这个问题上更新了我的答案。 – JaredPar 2009-12-10 18:39:16

3

海拔是每个进程,所以你不能有一个DLL本身提升。您需要查看以独立的升级过程托管DLL;或者你可以看看海拔COM moniker,并且这样做。