我正在开发部署在Windows Standard Embedded 7平台上的软件。 它利用inpout32.dll,一个stream行的库来读/写并行端口。 这个图书馆有点鬼鬼祟祟。 它不是通过安装程序来安装,而是懒惰地安装 – 在加载和调用时,它会查看硬件并select作为程序资源一部分的驱动程序。 这然后被复制到Windows驱动程序目录。
问题是如果程序不是以pipe理员身份运行,则此副本将不会成功。 而软件就这样死了。 所以我正在寻找一个优雅的解决scheme,不涉及closures用户帐户控制(即使工作?)。 在清单中指示程序应该以pipe理员模式运行将是一种方式,但这会popup一个对话框,我不希望每次都发生这种情况。 有没有办法指定“只能作为pipe理员运行一次”?
假设没有,你可以给我什么build议?
如果你不能控制代码,你需要培训用户。 我有这个与我使用的一些旧的应用程序。 我作为管理员运行一次,以便他们更新注册表或无论他们需要做什么,然后再也不会。
如果你写这个应用程序,这是一个处理它的方法。 写一个助手的EXE,做的事情,需要提升。 当应用程序运行时,检查是否需要做什么已经完成或不(例如注册表项存在或类似的东西,你可以检查,而不被提升)。 如果不:
主应用程序从未提升,用户知道发生了什么事情,UAC提示并不意外。
我喜欢@凯特格雷戈里的答案,但决定先尝试别的。 这是编写一个安装程序助手,会安静地调用Install()覆盖的inpout32函数之一。 由于这是用管理员权限完成的,所以它很高兴地将嵌入式驱动程序复制到system32,瞧!