2
我的应用程序需要在运行时执行一些特权操作。例如,当用户第一次运行我的应用程序时,我必须创建并格式化虚拟驱动器。我使用无证api formatex来完成fomating工作,但是formatex需要管理员权限。如果操作系统是Vista或更高版本,我可以用'COM Elevation Moniker'提示UAC对话框,它工作正常。但在XP上,这种技术不适合,所以我使用模拟方法。 如果应用程序运行所限制的用户,我在格式化是这样的:我如何在运行时在运行时提升我的进程win xp
CredUIPromptForCredentials() -> prompt to get administrator credentials
LogonUser()
ImpersonateLoggedOnUser()
formatex()
RevertToSelf()
formatex仍然失败...... 当然,运行我的应用程序作为管理员的作品,但它是不好的,是安装我的应用程序根据用户而不是每台机器,即使用户是受限用户,也应该在当前用户环境下工作。
如何在运行时正确提升我的应用程序以执行格式化作业?任何一个帮助?
这是我在我的应用程序做(不IsUserAdmin()检查,虽然 - 我让Win32 API函数报告'ERROR_ELEVATION_NEEDED'我代替),以及它的工作原理很好。 – 2011-12-30 18:59:42
感谢dimitri的回答。我最终使用dimitri提出的方法,但有点不同。我使用CredUIPromptForCredentials() - > LogonUser() - > IsUserAdmin(我的功能) - > CreateProcessWithLogonW循环来确保管理员凭证。现在一切顺利。 – toki 2012-01-04 07:44:23