仅以pipe理员身份第一次运行程序

我正在开发部署在Windows Standard Embedded 7平台上的软件。 它利用inpout32.dll,一个stream行的库来读/写并行端口。 这个图书馆有点鬼鬼祟祟。 它不是通过安装程序来安装,而是懒惰地安装 – 在加载和调用时,它会查看硬件并select作为程序资源一部分的驱动程序。 这然后被复制到Windows驱动程序目录。

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

假设没有,你可以给我什么build议?

如果你不能控制代码,你需要培训用户。 我有这个与我使用的一些旧的应用程序。 我作为管理员运行一次,以便他们更新注册表或无论他们需要做什么,然后再也不会。

如果你写这个应用程序,这是一个处理它的方法。 写一个助手的EXE,做的事情,需要提升。 当应用程序运行时,检查是否需要做什么已经完成或不(例如注册表项存在或类似的东西,你可以检查,而不被提升)。 如果不:

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

主应用程序从未提升,用户知道发生了什么事情,UAC提示并不意外。

我喜欢@凯特格雷戈里的答案,但决定先尝试别的。 这是编写一个安装程序助手,会安静地调用Install()覆盖的inpout32函数之一。 由于这是用管理员权限完成的,所以它很高兴地将嵌入式驱动程序复制到system32,瞧!