2009-11-28 86 views
2

我真的不明白窗户UAC .../谅解UAC在Windows Vista上7

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

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

我需要能够更新该目录中的文件,而不会调用提升的特权,并且主应用程序仍然“保护”,只允许访问该目录。我不能移动Data文件夹,因为它是我需要连接的第三方应用程序。

如何确定程序文件中的文件夹需要UAC?程序文件在某些​​方面是特殊的还是只是权限?如果我要调整该Data子目录上的权限,以便运行该程序的用户帐户具有写权限,那么允许我的应用程序更新该目录中的文件而无需特殊权限?

还是有更好的方法来实现这一点,我没有想到?我的更新程序需要在Java中,所以获得特权是一个痛苦。我想我需要编写一个C++包装来运行java虚拟机,这样我才能给这个包装一个适当的清单。不是不可能的,但我不想这样做。

回答

1

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

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

这是VMWare Workstation在更改全局设置时的工作方式。

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

+1

我不觉得在这种情况下,它特别是一个肮脏的黑客。该应用程序应该被设计成将Data目录放在用户的文档区域中,而不是在它自己的程序文件下,所以通过授予对它的写入访问权限,我没有授予* good *设计不会给予的任何许可 - 这不是一件好事......至少这是我的理解。 我有2个可执行文件的问题是,这个程序需要在java中,所以这不是一件简单的事情。 尽管如此,+1点还是不错的,只是不太确定我可以轻松做到这一点 – jcoder 2009-12-01 12:12:09

+0

接受此,因为它是正确的答案,我想即使它不是我想要的答案:) – jcoder 2009-12-04 08:18:38

2

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

+0

这将工作吗?那真的是我的问题,就是“绕过”UAC的一个目录,就像改变目录的权限一样简单。 – jcoder 2009-11-28 09:35:15

+0

是的,为“Authenticated Users”添加写入权限应该可行,至少它对我有用。 – DxCK 2009-11-28 19:21:16

+0

谢谢,它给了我选择。尽管我只是想将它们更改为如果文件夹位于正确的位置,但我确实对更改权限感到不舒服。 – jcoder 2009-12-01 12:13:16