0

我有一个应用程序停止服务,复制文件,然后再次启动服务。我希望它显示一个进度条,没有额外的窗口,没有改变屏幕,只是让 UAC 做它的事情并从那里继续(它是一个配置程序,所以它仍然可以作为标准用户使用,副本上有盾牌图标按钮)。

它这样做的方式是通过以管理员身份打开一个单独的应用程序(另一个自己的应用程序,使其不可见,就像 msiexec 所做的那样),然后新的应用程序执行它的操作并通过 SendMessage 发回进度报告。这很好用,但事实证明 SendMessage 只能在管理员/非管理员应用程序之间以一种方式工作。重定向 StandardInput 不起作用,因为这需要关闭 ShellExecute,而“runas”需要打开 ShellExecute。

我不想使用文件,因为这会很慢并且存在安全风险(我在之前包含命令的 CopyData 消息旁边发送了一个密钥代码)。是否有另一种方法来重定向标准输入/输出?微星是如何做到的?

我为此使用 C#。

4

1 回答 1

0

我打算像西蒙一样建议管道。

但是,其中一个技巧是更高完整性的进程需要创建管道并用中等强制完整性级别标记它,以便您的中等完整性进程可以访问它。

于 2012-05-04T03:25:56.613 回答