仅作为管理员第一次运行程序

时间:2014-02-17 15:30:09

标签: windows installation administrator

我正在研究部署在Windows Standard Embedded 7平台上的软件。它使用了inpout32.dll,这是一个流行的库,用于从/到并行端口的读写。这个图书馆有点鬼鬼祟祟。它不是通过安装程序安装,而是懒洋洋地安装 - 当它加载并进行调用时,它会查看硬件并选择一个驱动程序,该驱动程序是程序资源的一部分。然后将其复制到Windows驱动程序目录。

问题是如果程序未以管理员身份运行,则此副本将不会成功。而软件就死了。所以我正在寻找一个优雅的解决方案,不涉及关闭用户帐户控制(甚至可以工作?)。在清单中指示程序应该以管理员模式运行将是一种方式,但是这会弹出一个对话框,我不希望每次都发生这种情况。有没有办法指定“仅作为管理员运行一次”?

假设没有,你能给我什么建议?

2 个答案:

答案 0 :(得分:1)

如果您无法控制代码,则需要培训用户。我使用了一些旧的应用程序。我以管理员身份运行它们,因此他们更新注册表或者他们需要做的任何事情,然后再也不会。

如果你写了这个应用程序,这是一种处理它的方法。编写一个帮助程序执行需要提升的东西。当应用程序运行时,检查您是否需要完成任何操作(例如,存在注册表项等等,您可以检查而不会被提升)。如果不是:

  • 建立一个对话框,告诉用户在[某些,任何,ABC]功能起作用之前需要完成的任何事情。在OK按钮上有一个UAC屏蔽。根据用户的不同,告诉他们如果他们没有对即将到来的UAC对话框说好,他们将无法获得他们的功能。
  • on OK,启动帮助程序exe - 它应该有一个需要提升的嵌入式清单。有很多方法可以从你的代码中提升它,但是为什么要这么做呢,这个东西的全部目的是做一个管理员的事情
  • 帮助者完成它的事情,然后退出。对于你的具体情况,我猜一个你知道会导致延迟加载的电话。

主应用程序从未升级,用户知道发生了什么,UAC提示并不出乎意料。

答案 1 :(得分:0)

我喜欢@Kate Gregory的回答,但他决定先尝试别的。这是编写一个安装程序帮助程序,它将静默调用Install()重写上的一个inpout32函数。由于这是通过管理员权限完成的,因此很高兴将嵌入式驱动程序复制到system32,瞧!