7

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

当它启动时,windows 会显示一个 UAC 对话框,上面写着:
您是否要允许以下程序对此计算机进行更改。

如果我禁用文件属性对话框中的“以管理员身份运行”复选框,我会得到一个对话框:
无法运行 [应用程序名称]。用户帐户“[Me]”没有足够的权限写入
C:\ProgramData[Company][Application Name]

此应用程序将尝试写入导致 UAC 向用户请求权限的 ProgramData 目录。

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

4

2 回答 2

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

    • 在 UAC 架构的虚拟化过程中,ProgramData 可能位于“受保护的目录”列表下。(需要来源) 在此处输入图像描述
  2. 我可以改变什么以使 UAC 不抱怨?

    • 这里有几个选项 -
      1. 看来您正在尝试写信给C:\ProgramData[Company][Product]
        我,这看起来像是路径分离问题。如果您的应用程序没有分隔这些目录,您正在尝试创建 [或使用] 一个名为C:\ProgramDataAdobePhotoshop 的目录,那么我认为这会导致您的 UAC 问题。尝试添加路径分隔符。C:\ProgramData\Adobe\Photoshop[举个例子]
      2. 禁用 UAC?UAC 用于防止未经授权的活动,如果您查看上面的流程图,任何具有写入“受限目录”或任何“提升操作”的签名的应用程序都会落入并引发 UAC 提示。您的用户会点击它,一切都很好。
      3. 使用 Application Data 文件夹,而不是 ProgramData 文件夹。该文件夹似乎被隐藏是有原因的。

我的建议- 对于任何需要故事数据的应用程序 - 使用用户Application Data而不是ProgramData文件夹。如果您使用此目录,您将不会收到任何 UAC 提示。(这个问题可以帮助解决)

于 2013-06-18T16:50:59.863 回答
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

于 2013-06-18T17:12:07.713 回答