【问题标题】:Change privileges based on the installation folder根据安装文件夹更改权限
【发布时间】:2014-08-17 08:50:00
【问题描述】:

我的 Windows 窗体有问题。 我为此创建了一个安装项目。 当我在c:\program files 文件夹中安装我的应用程序时,因为UAC,我双击时我的应用程序无法运行。 所以,我安装在C:\ 文件夹中,它可以工作。 如果我想在C:\program files 中工作,我需要创建清单并将其与

requestedExecutionLevel  level="requireAdministrator" uiAccess="false"

requestedExecutionLevel  level="highestAvailable" uiAccess="false"

但是以这种方式,每次我打开我的应用程序时,它都会显示带有“未知发布者...”的窗口,我需要单击“确定”。

我希望当应用程序安装在 UAC 工作的文件夹中时,我必须像以前一样使用具有特权的清单,但如果我的安装文件夹像 C:\(UAC 不起作用)我不想要带有“未知发布者..”的窗口;在这种情况下,我需要使用默认设置嵌入清单。

【问题讨论】:

  • 根本问题是您的应用程序正在做一些不应该做的事情,很可能会写入安装它的文件夹。如果您可以识别并修复此问题,则应用程序应该'根本不需要清单。 Process Monitor(可从 Microsoft 网站获得)通常可用于识别此类问题。

标签: windows winforms installation manifest uac


【解决方案1】:

requireAdministrator 级别是您要放入安装程序清单的级别。这将使您能够在磁盘上任何地方 安装应用程序,无论是在 Program Files 文件夹中还是在根目录中(不确定您为什么要这样做),因为管理员会阅读/write 访问所有这些位置。

但是,请注意,您希望将此添加到安装程序的应用程序清单,而不是您的应用程序。您只需要这些额外的权限在安装过程中,而不是在应用程序的正常执行过程中。因此,只有在运行设置向导时才会提示您,而不是每次启动应用程序时都会提示您。安装后,用户无需对应用程序目录进行读/写访问,只需只读访问即可。

不过,您仍会在 UAC 对话框中看到“未知发布者”。要解决这个问题,您必须获得一个 Authenticode 证书并使用它来签署您的可执行文件。您可以从 ComodoSymantec(以前的 Verisign)或 Go Daddy 等人那里购买其中一种。有关代码签名的更多信息,请参阅this article。如果您打算将它们用于一般分发,我强烈建议您对可执行文件进行签名。但是,如果您不想或买不起(例如,这只是一个爱好项目),那么它不会伤害任何东西 - 用户只需要接受它来自未知发布者即可。

最后,值得一提的是,Windows 有一个特殊的兼容性行为,它可以启动名为“setup.exe”的安装应用程序。这些会以管理权限自动运行,并在必要时提示 UAC 提升。因此,即使不将此信息添加到清单中,您也应该能够使其工作,但您仍然应该这样做。

【讨论】:

  • 你的第一段是错误的。 Windows 设置的默认 ACL 允许所有用户在 C: 的根目录下创建文件夹,但不能在 C:\Program Files 的根目录下创建文件夹。这不是错误配置。
  • 真的吗,@Andrew?那不是我的经验。哦,好吧,我没有设置干净的系统来验证它,所以我必须和你一起去。
  • 是的,我已经检查过了。这看起来确实很奇怪,但这绝对是微软的故意行为(我的猜测是为了与希望能够在根目录中创建项目的 NT 之前的应用程序兼容)。
  • 这不是一个很好的理由……很多 pre-NT 应用程序都希望能够在 Windows 目录中创建项目,但我们希望这不是公共读/写。从我在网上可以找到的(而且搜索起来非常困难)看来,普通用户可以在根目录上创建项目,但他们确实继承这些项目的所有权。
  • 我可以确认系统驱动器上的默认 ACL 授予“Authenticated Users”在根文件夹上添加目录(但不是文件)的权限。目录的创建者应该像往常一样被授予所有权,如果这是特殊情况,我会感到非常惊讶,并且新文件夹的继承权限包括“经过身份验证的用户”的修改访问权限。创建者直接包含在继承的权限中,特别是没有完全访问权限 - 所以可能有些人将其与没有所有权混淆。
猜你喜欢
  • 1970-01-01
  • 2021-03-01
  • 2012-02-16
  • 1970-01-01
  • 2012-04-27
  • 2018-09-06
  • 1970-01-01
  • 2013-10-24
  • 1970-01-01
相关资源
最近更新 更多