我真的不了解Windows UAC ...

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

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

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

如何确定程序文件中的文件夹需要UAC?程序文件在某种程度上是特殊的还是只是权限?如果我要调整该Data子目录的权限,以便运行该程序的用户帐户具有写访问权限,那么我的应用程序是否可以更新该目录中的文件而没有特殊权限?

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

有帮助吗?

解决方案

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

  1. 创建两个可执行文件(一个应该是主要的,不需要任何操作的权限,第二个应该能够执行权限操作)。
  2. 使用有限的权限启动第一个(主要)。
  3. 当您需要执行特权操作时,请创建一个具有管理权限的新流程(将弹出UAC窗口)并启动其中的第二个应用程序。
  4. 完成第二个应用程序后关闭它,您将返回限制模式。
  5. 这是VMWare Workstation在您更改全局设置时的工作方式。

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

其他提示

尝试在安装时更改应用程序的目录安全设置,以允许“经过身份验证的用户”写权限。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top