【问题标题】:How to use an unmanaged DLL in VS installer project, but without the user needing admin rights?如何在 VS 安装程序项目中使用非托管 DLL,但用户不需要管理员权限?
【发布时间】:2018-01-23 11:56:01
【问题描述】:

我正在为 C# 项目创建安装程序。它需要非托管的第 3 方 C++ dll 才能连接到硬件设备。当我从调试器运行项目时,或者当我在已安装的程序上右键单击 -> 以管理员身份运行时,一切正常。但是,如果我不以某种方式以管理员身份运行它,它就会崩溃。那么如何将安装程序设置为不需要管理员权限即可运行?我知道我可以将 app.manifest 中的 requestedExecutionLevel 设置为 requireAdministrator,但我不希望每次都出现 UAC 提示,而且我不确定最终用户的机器是否能够以管理员身份运行任何东西。

我目前的解决方法是将它直接安装到 C:/,但我想将它安装到相同的 Program Files 目录中,所有其他应用程序都安装到没有这个挫折。

【问题讨论】:

  • 请一次问一个问题,不要问两个不相关的问题
  • 我不确定您所说的“其他没有这种挫折的应用程序”是什么意思。任何安装到 Program Files 中的安装程序都会生成 UAC 提示。这是预期的行为 - 如果您不是管理员,则无法在 Program Files 中安装软件。
  • 我删除了另一个问题。 “其他没有这个挫折的应用程序”我想我的意思是“其他没有外部库/不提示管理员权限的应用程序的应用程序”
  • 但是外部库不应该与它有任何关系 - 要安装在 Program Files 中,您必须具有管理员权限。

标签: c# .net windows-installer dllimport unmanaged


【解决方案1】:

受限用户不能仅仅因为他们正在运行安装而规避安全限制。写入 ProgramFiles 文件夹需要提升(可能与安装所做的其他一些事情一样),因此除了提升安装之外别无选择 - 它将显示 UAC 提升提示。您还没有说您使用什么工具来构建您的 MSI,但是 MSI 不使用清单并且(以 WiX 为例)提升使用 Package InstallPrivileges 元素。

用户不需要是管理员,因为 UAC 提示将允许管理员在“肩上”键入他们的凭据以进行安装,如果事实证明可行的话。在企业类型的 GPO 安装中也有托管部署选项,用户不需要提升。

让 MSI 调用您的代码需要创建安装将调用的自定义操作 - 它具有必需的调用约定。然后你可以从它调用到你的第 3 方 C++ Dll。在不了解您想要拨打的电话的更多信息的情况下,很难添加更多信息。是否在安装早期调用(可能来自 UI)?安装后?这是安装的条件吗?安装后可以在应用程序中进行配置检查吗?

【讨论】:

  • 这是有道理的。我想就上下文而言,这是我做过的第一个 VS 安装程序项目,所以我不确定一些事情。那么 UAC 提示是否只会在第一次启动时出现?使用默认的 VS 2010 安装程序项目,启动程序时没有 UAC 提示,它只是启动并挂起。
猜你喜欢
  • 2021-12-26
  • 2013-08-01
  • 2010-09-09
  • 2018-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-04
  • 2014-05-31
相关资源
最近更新 更多