是否可以为单个方法要求管理员权限?
像这样的东西:
[RequireAdminRightsForThisMethod()]
private void TheMethod(){
// Do something
}
Run Code Online (Sandbox Code Playgroud) 我正在编写一个修改实用程序来修改一些键HKEY_CLASSES_ROOT.
所有在Windows XP等下工作正常.但是我Requested registry access is not allowed在Windows 7下遇到错误.Vista和2008我也猜错了.
我应该如何修改我的代码以添加UAC支持?
如果需要特权提升,Inno Setup安装程序具有可用于控制安装程序启动时的PrivilegesRequired指令.我希望我的安装程序甚至可以为非管理员用户工作(没有问题将我的应用程序安装到用户文件夹,而不是Program Files).所以我设置PrivilegesRequired为none(未记录的值).这使得UAC仅为管理员用户提示弹出,因此他们甚至可以安装到Program Files.没有UAC提示非管理员用户,所以即使他们可以安装应用程序(到用户文件夹).
这有一些缺点:
是否有一些方法可以在需要时(当用户选择仅由管理员帐户写入的安装文件夹时)使Inno Setup请求权限提升?
我假设在Inno Setup中没有这个设置.但可能有一个程序化的解决方案(Inno Setup Pascal脚本)或某种插件/ DLL.
请注意,即将推出的Inno Setup 6具有对非管理安装模式的内置支持.
我发现了一篇关于如何通过调用来提升用C++编写的COM对象
的文章CoCreateInstanceAsAdmin.但是我无法找到或做的是将.NET(c#)应用程序的一个组件实现为COM对象,然后调用该对象来执行需要UAC提升的任务.MSDN将此文档记录为管理COM对象模型.
我知道以管理员身份启动应用程序(或其他应用程序)是可行且非常容易的,以便在单独的过程中执行任务(例如参见Daniel Moth的帖子,但我正在寻找的是一种方式从同一个未提升的.NET可执行文件中做所有事情.当然,这样做会在新进程中生成COM对象,但是由于透明的编组,.NET COM对象的调用者不应该(也是很多)意识到这一点.
关于如何使用C#,C#项目,通过CoCreateInstanceAsAdminAPI 实现C#编写的COM对象的任何想法都会非常有用.所以我真的很想学习如何在C#中编写COM对象,然后我可以通过COM高程API从C#调用它.
不要紧,升高的COM对象是否在同一进程中运行.我只是不想要提升整个应用程序; 我想要提升将执行代码的COM对象.如果我能写出一些东西:
// in a dedicated assembly, marked with the following attributes:
[assembly: ComVisible (true)]
[assembly: Guid ("....")]
public class ElevatedClass
{
public void X() { /* do something */ }
}
Run Code Online (Sandbox Code Playgroud)
然后让我的主应用程序ElevatedClass通过CoCreateInstanceAsAdmin调用实现.但也许我只是在做梦.
当用户从我的应用程序中保存文件时,他们当前无法保存到受限制的位置(如C :).我认为这是一个很好的限制,但我想提供一个UAC提示来提升权限并允许用户保存在受限制的区域.
我已经看到很多关于这个主题的答案,涉及使用'runas'产生具有提升权限的新进程.此外,似乎可以通过冒充其他用户来完成.据我所知,这两种方法都要求用户提供用户凭据.
我想要做的基本上就是Windows本身的功能.当您尝试将文件复制到Windows 7中的C:\时(假设您已将UAC设置为其默认级别),您将收到以下提示:

单击带有UAC屏蔽的"继续"按钮后,该文件将复制到C:\,并且没有提示凭据(假设您已使用管理员权限登录).
如何在管理员用户的应用程序中复制此行为?他们不应该冒充任何其他用户,因为他们已经拥有管理员权限.任何人都可以提供Windows在此过程中所做的事情的详细信息吗?它们是否使用提升的权限生成新的explorer.exe进程?
某些应用程序(以常规用户启动)将在必要时请求提升权限(例如,文件管理器需要编写此类文件夹),然后继续执行操作.
我该如何复制这种行为?
我的应用程序需要写入\ ProgramData中可以保护的文件.这只在安装后发生一次.
是否有一个API函数可以获取ACL信息并提示用户授权应用程序访问该文件?换句话说,应用程序会要求Windows提示用户进行确认和授权.这应该以交互方式发生,并允许应用程序在授权访问文件后继续执行.该应用程序以标准用户身份运行,不需要管理员权限.
使用CreateFile()打开该文件.
编辑:我的查询之间存在细微差别,其他人称之为重复.我要求访问一个特定对象,一个文件的权限.其他人要求提升整个过程的特权.无论如何,我感谢所有包含解决方案的回复.
我在VS 2010和C#中开发了一个小的Winform应用程序.并创建了设置.
我已将应用程序配置文件放在应用程序文件夹路径中以保存用户凭据.安装应用程序无法访问配置文件后,因为我给出了程序安装默认路径,如下所示:
[ProgramFilesFolder] [生产] [ProductName]的
所以我需要永久保存我的用户凭据.我需要读写权限.此外,我需要记录应用程序异常.
我有一个生成CSV文件的WinForm应用程序.我为用户提供了选择保存这些CSV的路径的选项.
用户正在使用Windows 7并以管理员身份登录.当他尝试通过应用程序保存CSV时,会出现"权限被拒绝"错误.
特别是有问题的应用程序是控制台应用程序.我们正在创建计划任务,并指定任务以将其作为管理员帐户启动.但是,当应用程序尝试将文件保存到指定文件夹(其用户名有权写入)时,会出现问题.
有没有办法允许机器管理员在他有权通过应用程序的任何地方创建文件夹/文件?
谢谢!
c# ×6
uac ×5
permissions ×2
.net ×1
c++ ×1
com ×1
elevation ×1
file-io ×1
inno-setup ×1
moniker ×1
pascalscript ×1
privileges ×1
qt ×1
registry ×1
security ×1
winapi ×1
windows ×1