标签: uac

当我的EXE文件名包含单词"update"时,如何避免UAC?

我注意到以下现象:

使用Delphi 7构建的可执行文件和部分名称(包括"Update")(例如"UpdateMyApp.exe")会导致UAC显示警告,例如"您是否允许程序对您的计算机进行更改".

这是通过简单的hello world应用程序实现的.在资源管理器中显示该文件会显示覆盖在应用程序图标上的屏蔽符号.

只要重命名exe,屏蔽就会消失,应用程序会在没有警告的情况下启动.

如上所述,这只发生在使用Delphi 7构建并在Windows 7上启动的程序(我假设在Vista上相同),但不是在例如WinXP上.

使用Delphi 2007快速检查表明此问题已消失.

有趣......吓人......

除了重命名文件外,我该怎么做才能防止这种情况发生?

delphi uac delphi-7

26
推荐指数
1
解决办法
7451
查看次数

Windows Vista/Windows 7权限:SeDebugPrivilege和OpenProcess

我能够找到的有关升级到我需要的适当权限的所有内容都与我当前的方法一致,但问题依然存在.我希望也许某人有一些Windows Vista/Windows 7内部体验可能会在只有黑暗的地方发光.我相信这会很长,但请耐心等待.

上下文

我正在开发一个需要访问当前机器上其他进程内存的应用程序.显然,这需要管理员权限.它还要求SeDebugPrivilege(不,它不是拼写错误SetDebugPrivilege),我相信自己要正确获取,尽管我怀疑是否有更多的特权是不必要的,因此我的问题的原因.到目前为止,Code已成功应用于所有版本的Windows XP,以及我的测试Vista 32位和Windows 7 64位环境.

处理

  • 程序将始终以管理员权限运行.在这篇文章中可以假设这一点.
  • 升级当前流程Access Token以包含SeDebugPrivilege权限.
  • 使用EnumProcesses该系统上创建当前PID列表
  • 使用OpenProcess具有PROCESS_ALL_ACCESS访问权限的句柄打开
  • 使用ReadProcessMemory读取其他进程的内存.

问题:

在开发和个人测试期间,一切都运行良好(包括Windows XP 32和64,Windows Vista 32和Windows 7 x64).但是,在同事的Windows Vista(32位)和Windows 7(64位)计算机上进行测试部署期间,似乎存在权限/权限问题,导致OpenProcess一般Access Denied错误失败.当以受限用户身份运行时(如预期的那样)以及以管理员身份明确运行(右键单击?以管理员身份运行以及从管理员级别命令提示符运行时)都会发生这种情况.

但是,在我的测试环境中,这个问题对我自己来说是不可再现的.我亲眼目睹了这个问题,所以我相信这个问题存在.我能够在实际环境和我的测试环境之间辨别的唯一区别是,在UAC提示符下使用域管理员帐户时发生了实际错误,而我的测试(无错误地工作)使用了本地管理员帐户. UAC提示.

看来虽然使用的凭据允许UAC"以管理员身份运行",但该流程仍未获得能够OpenProcess在另一个进程上运行的正确权限.我对Vista/Windows 7的内部结构不太熟悉,知道这可能是什么,我希望有人知道可能是什么原因.

踢球者

报告此错误的人,以及谁的环境可以定期重现此错误,有一个小应用程序,RunWithDebugEnabled其名称是一个小的引导程序,似乎升级其自己的权限,然后启动传递给它的可执行文件(从而继承升级的特权).使用此程序运行时,在UAC提示符下使用相同的域管理员凭据,程序可以正常工作,并且能够成功调用OpenProcess并按预期运行.

因此,这肯定是获取正确权限的问题,并且已知域管理员帐户应该能够访问正确权限的管理员帐户.(显然获得这个源代码会很棒,但如果可能的话,我不会在这里).

笔记

如上所述,失败OpenProcess尝试报告的错误是Access Denied.根据MSDN文档OpenProcess:

如果调用者启用了SeDebugPrivilege特权,则无论安全描述符的内容如何,​​都会授予所请求的访问权限.

这让我相信在这些条件下可能存在以下问题:(1)获取SeDebugPrivileges …

c++ windows privileges uac openprocess

25
推荐指数
1
解决办法
2万
查看次数

标记MSI,因此必须以提升的管理员帐户运行

我有一个CustomAction作为MSI的一部分.

它必须作为域帐户运行,该帐户也是本地Administrators帐户的成员.

它不能使用NoImpersonate标志将自定义操作作为NT Authority\System运行,因为它不会访问网络资源.

在启用了UAC的Vista/2008上,如果NoImpersonate处于关闭状态,则它将作为执行用户运行,但具有非特权令牌,并且无法访问本地资源,例如.installState.请参阅UAC架构

任何人都知道一种方法

  • 强制MSI使用提升的令牌运行,就像从提升的命令提示符运行一样?

  • 强制CustomAction运行提升(清单中的requireAdministrator似乎不起作用)?

  • 如果启用了UAC并且是否未升级并且如果出现警告或取消安装,请确定?

c# windows-installer uac custom-action

24
推荐指数
1
解决办法
2万
查看次数

24
推荐指数
1
解决办法
4万
查看次数

是否可以在Windows中以管理员身份运行相对路径的快捷方式?

要使用相对路径创建快捷方式,请将目标设置为以下内容.

%windir%\system32\cmd.exe /c start your_relpath\app.exe [your_args]
Run Code Online (Sandbox Code Playgroud)

使程序以管理员身份运行也很简单.

Properties > Advanced > Run as administrator
Run Code Online (Sandbox Code Playgroud)

但将两者放在一起并不奏效.当cmd.exe开始为管理员,它失去当前的工作目录,并去%windir%\system32.相对路径从那里开始,这不是预期的.

有没有办法制作一个相对又以管理员身份运行的快捷方式?

windows uac shortcut relative-path

24
推荐指数
1
解决办法
3万
查看次数

仅在需要时使Inno Setup安装程序请求权限提升

如果需要特权提升,Inno Setup安装程序具有可用于控制安装程序启动时的PrivilegesRequired指令.我希望我的安装程序甚至可以为非管理员用户工作(没有问题将我的应用程序安装到用户文件夹,而不是Program Files).所以我设置PrivilegesRequirednone(未记录的值).这使得UAC仅为管理员用户提示弹出,因此他们甚至可以安装到Program Files.没有UAC提示非管理员用户,所以即使他们可以安装应用程序(到用户文件夹).

这有一些缺点:

  • 有些人在他们的计算机上使用不同的管理员和非管理员帐户,通常使用非管理员帐户.通常,在使用非管理员帐户启动安装时,当他们收到UAC提示时,他们会输入管理员帐户的凭据以继续.但这不适用于我的安装程序,因为没有UAC提示.
  • (过于可疑)拥有管理员帐户且想要安装到用户文件夹的人无法在没有(不需要)管理员权限的情况下启动我的安装程序.

是否有一些方法可以在需要时(当用户选择仅由管理员帐户写入的安装文件夹时)使Inno Setup请求权限提升?

我假设在Inno Setup中没有这个设置.但可能有一个程序化的解决方案(Inno Setup Pascal脚本)或某种插件/ DLL.


请注意,即将推出的Inno Setup 6具有对非管理安装模式的内置支持.

privileges uac inno-setup pascalscript elevated-privileges

24
推荐指数
2
解决办法
2万
查看次数

如何检测Vista UAC是否已启用?

我需要我的应用程序以不同的方式运行,具体取决于Vista UAC是否启用.我的应用程序如何在用户的计算机上检测UAC的状态?

uac windows-vista

22
推荐指数
1
解决办法
2万
查看次数

Windows 7和Vista UAC - 以编程方式请求C#中的提升

我有一个程序,在极少数情况下只需要提升到Admin,所以我不想设置我的清单以要求永久性提升.

我怎样才能在我需要时以编程方式请求提升?

我正在使用C#

c# uac windows-vista windows-7

22
推荐指数
1
解决办法
2万
查看次数

Windows如何决定是否显示UAC提示?

在我的VB6应用程序中,我打开其他EXE文件.我的应用程序在没有任何UAC提示的情况下运行,但我有一个检查软件更新的EXE.这会提示UAC提示.那么Windows如何决定是否显示UAC提示?我看到了这个链接.那么它取决于我在我的应用程序中编写的代码吗?有趣的是,我的应用程序(即主EXE文件)不会提示UAC,而检查和下载更新的小EXE会提示UAC.我已经对所有EXE文件进行了数字签名.我已经看过以下链接了:

http://msdn.microsoft.com/en-us/library/windows/desktop/aa511445.aspx

http://technet.microsoft.com/en-us/library/cc505883.aspx和其他一些.

但我仍然不清楚它.

windows security vb6 uac windows-7

22
推荐指数
1
解决办法
1万
查看次数

获取Program Compatibility Assistant对话框的原因是什么?

应用程序关闭后获取Program Compatibility Assistant对话框的可能原因是什么?

程序兼容性助手图像http://i.msdn.microsoft.com/dynimg/IC5958.gif

编辑:程序兼容性助手:常见问题解答

我意识到这个问题已经被提出来了

但是,我的应用程序:

  1. 关闭后才能获得PCA
  2. 不试图做任何需要提升权限的事情(我不认为)
  3. 从IDE运行时不会获得PCA
  4. 不是安装程序/安装程序
  5. 程序名称中没有"installer"或"setup"
  6. 关闭时不抛出异常,或者使用0以外的代码退出(我不认为)
  7. 如果我将节点添加到应用程序清单,则不会获得PCA<compatibility>

注意#6,有以下app.manifest,我不再获得PCA:

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <requestedExecutionLevel level="asInvoker" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <!--The ID below indicates application support for Windows Vista -->
      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
      <!--The ID below indicates application support for Windows 7 -->
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
    </application>
  </compatibility>
</asmv1:assembly> …
Run Code Online (Sandbox Code Playgroud)

compatibility uac windows-7

21
推荐指数
1
解决办法
1万
查看次数