将 CopyData 用于提升的应用程序有啥好的替代方法
Posted
技术标签:
【中文标题】将 CopyData 用于提升的应用程序有啥好的替代方法【英文标题】:What is a good alternative to using CopyData to an elevated application将 CopyData 用于提升的应用程序有什么好的替代方法 【发布时间】:2010-12-08 22:39:59 【问题描述】:我有一个应用程序会停止服务,复制文件,然后再次启动服务。我希望它显示一个进度条,没有额外的窗口,没有改变屏幕,让 UAC 做它的事情并从那里继续(它是一个配置程序,所以它仍然可以作为标准用户使用,副本上有盾牌图标按钮)。
它这样做的方式是通过以管理员身份打开一个单独的应用程序(另一个自己的应用程序,使其不可见,就像 msiexec 所做的那样),然后新的应用程序执行它的操作并通过 SendMessage 发回进度报告。这很好用,但事实证明 SendMessage 只能在管理员/非管理员应用程序之间以一种方式工作。重定向 StandardInput 不起作用,因为这需要关闭 ShellExecute,而“runas”需要打开 ShellExecute。
我不想使用文件,因为这会很慢并且存在安全风险(我在 CopyData 消息旁边发送了一个密钥代码,其中包含之前的命令)。是否有另一种方法来重定向标准输入/输出?微星是如何做到的?
我为此使用 C#。
【问题讨论】:
进程间通信还有其他方式:管道、套接字、内存映射文件、WCF 等……你考虑过吗? ...实际上,没有。我们一直在使用 CopyData 并在其他任何地方重定向命令行流,所以我完全没有想到。我以前从未使用过内存映射文件,但套接字可以很好地工作。 我会将您标记为答案,但只能对 cmets 进行投票... 【参考方案1】:我打算像 Simon 一样推荐管道。
其中一个技巧是,更高完整性进程需要创建管道并用中等强制完整性级别标记它,以便您的中等完整性进程可以访问它。 p>
【讨论】:
以上是关于将 CopyData 用于提升的应用程序有啥好的替代方法的主要内容,如果未能解决你的问题,请参考以下文章