当前位置: 首页 > 编程语言 > C#

UAC需要一个控制台应用程序分享

时间:2023-04-10 13:40:02 C#

UAC需要一个控制台应用程序我有一个控制台应用程序,它使用了一些需要管理员级别的代码。我读到我需要添加一个清单文件myprogram.exe.manifest,它看起来像这样:但它仍然没有提升UAC(无论是在控制台中还是为了在VS中调试)。我怎么解决这个问题?更新如果我在管理员中运行解决方案或在管理员中运行/bin/*.exe,我就能让它工作。我仍然想知道是否可以在应用程序启动时弹出一个窗口,而不是显式右键单击>以管理员身份运行?您需要将UAC清单作为嵌入式Win32资源嵌入。请参阅将UAC清单添加到托管代码。简而言之,您可以使用WindowsSDK命令行工具将其嵌入到您的可执行文件中。您可以通过在VS项目属性中将以下行作为构建后步骤作为构建后任务来自动执行此操作:mt.exe-manifest"$(ProjectDir)$(TargetName).exe.manifest"-updateresource:"$(TargetDir)$(TargetName).exe;#1"对于使用VisualStudio的任何人来说都非常简单。我即将设置WindowsSDK并执行mt.exe构建后步骤以及在将其内置到VS中之前执行的所有步骤。我想我会为后代记录下来。项目|添加新项->VisualC#项->应用程序清单文件打开app.manifest,设置requestedExecutionLevel。将@level更改为“requireAdministrator”BuildDangDangScott的答案将执行您想要的操作,但Microsoft建议控制台应用程序显示“拒绝访问”消息,而不是提示提升权限。来自http://msdn.microsoft.com/en-us/library/bb756922.aspx:控制台应用程序在控制台窗口中显示其输出,而不是使用单独的用户界面。如果应用程序需要使用完整的管理员访问令牌运行,则需要从提升的控制台窗口启动它。您必须为您的控制台应用程序执行以下操作:将您的应用程序标记为“asInvoker”:您可以通过创建您的应用程序的清单来执行此操作,其中您设置了RequestedExecutionLevel==asInvoker。此设置允许来自非提升上下文的调用者创建您的进程,这允许他们继续执行步骤2。如果应用程序在没有完整管理员访问令牌的情况下运行,则提供错误消息:如果应用程序在非提升控制台中启动,应用程序应提供一条短消息并退出。建议的消息是:“访问被拒绝。使用所选选项需要管理员权限。使用管理员命令提示符来完成这些任务。”应用程序还应在启动失败时返回错误代码ERROR_ELEVATION_REQUIRED以方便编写脚本。我的C#代码如下。它在WindowsXP(管理员->确定,标准用户->拒绝)和WindowsServer2008(提升管理员->确定,非提升管理员->拒绝,标准用户->拒绝)上进行了测试。以上就是C#学习教程:UAC需要控制台应用分享的所有内容。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注—staticintMain(string[]args){if(!HasAdministratorPrivileges()){Console.Error.WriteLine("AccessDenied.Administratorpermissionsare"+"neededtousetheselectedoptions.Useanadministratorcommand"+"prompttocompletethesetasks.");返回740;//ERROR_ELEVATION_REQUIRED}...返回0;}privatestaticboolHasAdministratorPrivileges(){WindowsIdentityid=WindowsIdentity.GetCurrent();WindowsPrincipal主体=newWindowsPrincipal(id);返回principal.IsInRole(WindowsBuiltInRole.Administrator);不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: