【问题标题】:Understanding UAC on windows vista / 7了解 windows vista / 7 上的 UAC
【发布时间】:2010-12-21 04:31:08
【问题描述】:

我不太懂windows UAC...

我需要我的程序能够更新文件并将其添加到属于程序的特定目录。此目录可能是 Program Files 中某个应用程序的子目录,例如 c:\Program Files\MyApp\Data 或者它可能安装在其他位置。

我相信如果它在 Program Files 下,那么我的程序将被阻止在那里写入,除非它以管理员身份运行并提升了它的访问权限。对吗?

我需要能够在不调用提升权限的情况下更新该目录中的文件,并且主应用程序仍然“受保护”,只允许访问该目录。我无法将 Data 文件夹移到其他地方,因为它是我需要与之交互的第 3 方应用程序。

如何确定 Program Files 中的文件夹需要 UAC? Program Files 在某些方面是特殊的还是只是权限?如果我要调整该 Data 子目录的权限,以便运行该程序的用户帐户具有写入权限,这是否允许我的应用程序在没有特殊权限的情况下更新该目录中的文件?

或者有没有更好的方法来实现这一点,我没有想到?我的更新程序需要在 java 中,所以获得提升的权限是一件痛苦的事情。我想我需要编写一个 C++ 包装器来运行 java VM,以便我可以为该包装器提供适当的清单。并非不可能,但我真的不想这样做。

【问题讨论】:

    标签: uac


    【解决方案1】:

    尝试在安装时更改应用程序的目录安全设置,以允许“Authenticated Users”写入权限。

    【讨论】:

    • 这行得通吗?这真的是我的问题,是否“绕过”一个目录的 UAC 就像更改该目录的权限一样简单?
    • 是的,向“Authenticated Users”添加写权限应该可以工作,至少它对我有用。
    • 谢谢,它给了我选择。尽管我只会将它们更改为文件夹位于正确位置时的权限,但我确实对更改权限感到不舒服。
    【解决方案2】:

    通常,当您需要受保护和不受保护的 UAC 模式时,请执行以下操作。

    1. 创建两个可执行文件(一个应该是主要的并且不需要任何操作权限,第二个应该能够执行权限操作)。
    2. 使用有限的权限启动第一个(主)。
    3. 当您需要执行特权操作时,创建一个具有管理权限的新进程(将弹出 UAC 窗口)并在其中启动第二个应用程序。
    4. 完成第二个应用程序后将其关闭,您将返回受限模式。

    当您更改全局设置时,VMWare Workstation 就是这样做的。

    编辑:更改文件夹的权限不是一个好方法。只是一个肮脏的黑客,因为任何人都可以写入该文件夹,这只会使 UAC 的角色无效 - 毕竟这是 UAC 的角色:防止特殊文件夹中的非特权更改。

    【讨论】:

    • 我不觉得在这种情况下这是一个肮脏的黑客。该应用程序应该被设计为将 Data 目录放在用户的文档区域中,而不是在它自己的程序文件下,因此通过在那里授予对它的写访问权限,我没有给予任何 good 设计的权限'没有给予-鼓励不是一件好事......至少这是我的理解。我对 2 个可执行文件的问题是这个程序需要在 java 中,所以这不是一件简单的事情。虽然分数很好,所以 +1,只是不太确定我能轻松做到这一点
    • 接受了这个,因为这是我想的正确答案,即使它不是我想要的答案:)
    猜你喜欢
    • 2010-12-13
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    相关资源
    最近更新 更多