2013-06-18 78 views
6

我有一个C#.NET应用程序,我正在维护大约20个支持程序集。UAC如何知道应用程序需要提升权限?

当它启动时,窗口显示UAC对话框,上面写着:
是否要允许以下程序进行修改,这台计算机。

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

此应用程序将尝试写入这是造成UAC到ProgramData目录请求用户许可。

UAC如何知道应用程序要写入ProgramData?
我可以更改什么,以便UAC不会抱怨?

+0

有几个,这样覆盖这个特定主题的问题。有没有解决你的问题?至于UAC不抱怨 - 你有2个选项 - 1.你需要点击它,或2.你需要禁用UAC。 UAC在那里为用户提供保护(不管烦恼:\) – sircapsalot

+0

您是否尝试过不写'C:\ ProgramData [公司] [应用程序名称]'? – Dennis

+0

该应用程序将大量文件存储到ProgramData中,并与所有用户共享。也许有一个更好的地方可以放置共享数据。 – Robert

回答

3
  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提示符下并触发UAC提示。你的用户会点击它,一切都很好。
      3. 使用应用程序数据文件夹,而不是ProgramData文件夹。该文件夹似乎是隐藏的原因。

我的建议 - 对于需要故事数据的应用程序 - 使用用户Application Data而非ProgramData文件夹。如果您使用此目录,则不会得到任何UAC提示。(this question可以与帮助)

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

相关问题