我有一个我编写的.NET exe文件,它有一些我公开并希望公开的属性。
我想要shell这个exe(Process.Start()),然后以某种方式引用这个exe并获取对这些公共属性的访问权限。这些属性公开有关正在运行的exe的信息。
我知道如何对exe进行shell。我知道如何添加对我想要使用此对象的项目的exe的引用。但是,如何访问此运行exe的属性?
我希望我能很好地解释自己。
如果您确实知道答案,也许您可以告诉我在运行时将正在运行的exe的属性暴露给另一个应用程序的标准方法是什么。
感谢您的帮助!
答案 0 :(得分:1)
这不起作用。
在进程之间共享数据的唯一方法是管道(Process.Start()可以重定向标准输入,标准输出和标准错误),共享内存(在纯托管代码中不可用),退出代码和文件系统或网络通信机制。
在您的具体情况下,我猜测命名管道是您想要的技术。
我个人从未使用过命名管道,但我使用了重定向标准输入和标准输出。
答案 1 :(得分:1)
您是否考虑过将对象公开给PowerShell,以便可以从PowerShell调用该对象?
公开对象:
runspace.SessionStateProxy.SetVariable("ObjectName", ObjectName)
然后PS脚本可以调用:
$ IDLevel.ObjectName
在这个对象中,您可以使用一些简单的“getter”方法来返回有关exe的信息。
我喜欢这种方法,因为你不仅可以获得信息。但是如果需要,可以公开允许您根据信息对对象进行更改的方法。返回。
答案 2 :(得分:1)
执行您所描述的操作的标准“Windows方式”是公开PerfMon counters并定期更新它们。
答案 3 :(得分:0)
您的EXE可以托管WCF服务。此服务可以公开可以公开有关正在运行的EXE的信息的操作(而不是属性)。
答案 4 :(得分:0)
您可以为您的第一个应用程序编写一个简单的WMI.NET Provider Extension,将配置设置公开给WMI ...然后其他程序可以监视和更改设置......
WMI.NET提供商扩展方案
http://msdn.microsoft.com/en-us/library/bb885141(v=vs.90).aspx
如何通过WMI公开配置设置
http://msdn.microsoft.com/en-us/library/bb404687(v=vs.90).aspx
Windows有许多不同的提供程序用于监视和管理Windows设置。您可以为应用程序注册新的命名空间,然后在另一个.NET应用程序中使用PowerShell或System.Management.Instrumentation来监视该命名空间。