UAC如何知道应用程序需要提升权限?

时间:2013-06-18 16:33:49

标签: c# .net uac

我有一个C#.NET应用程序,我正在维护大约20个支持程序集。

启动时,Windows会显示一个UAC对话框,其中显示:
是否要允许以下程序对此计算机进行更改。

如果我在文件属性对话框中禁用“以管理员身份运行”复选框,则会出现以下对话框: 无法运行[应用程序名称]。用户帐户“[我]”没有足够的权限写入
C:\ ProgramData [公司] [申请名称]

此应用程序将尝试写入ProgramData目录,导致UAC要求用户许可。

UAC如何知道应用程序将写入ProgramData?
我可以改变什么以便UAC不抱怨?

2 个答案:

答案 0 :(得分:4)

  1. UAC如何知道应用程序将写入ProgramData

    • ProgramData可能位于UAC架构虚拟化过程中的“受保护目录”列表下。 (需要来源) enter image description here
  2. 我可以改变什么以便UAC不抱怨?

    • 这里的情侣选择 -
      1. 您似乎正在尝试写信C:\ProgramData[Company][Product]
        对我来说,这看起来像路径分离问题。您正在尝试创建[或使用]名为C:\ProgramDataAdobePhotoshop的目录 如果您的应用程序没有分离这些目录,那么我认为这会导致您的UAC问题。尝试添加路径分隔符。 C:\ProgramData\Adobe\Photoshop [例如]
      2. 停用UAC? UAC用于防止未经授权的活动,如果您查看上面的流程图,任何具有写入“受限目录”或任何“提升操作”的签名的应用程序,它都将属于,并引发UAC提示。您的用户会点击它,一切都很顺利。
      3. 使用Application Data文件夹而不是ProgramData文件夹。该文件夹似乎是隐藏的原因。
  3. 我的建议 - 对于需要故事数据的任何应用程序 - 使用用户Application Data而不是ProgramData文件夹。如果使用此目录,则不会收到任何UAC提示。 (this question可以提供帮助)

答案 1 :(得分:0)

应用程序可能有一个清单文件,例如:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
        <security>
            <requestedPrivileges>
                <requestedExecutionLevel level="requireAdministator" uiAccess="false"/>
            </requestedPrivileges>
        </security>
    </trustInfo>
</assembly>   

如果有,requestedExecutionLevel level="requireAdministator将使其显示UAC对话框。

清单文件通常称为app.manifest