我试图获得由微软AppV使用C#启动的所有虚拟进程的列表。
我尝试在C#中使用Powershell,但我得到了以下错误:
System.Management.Automation.CommandNotFoundException:‘’命令在模块'AppvClient‘中找到,但无法加载该模块。有关更多信息,请运行“”。
奇怪的是,如果我使用Powershell命令行,它就可以正常工作,并列出虚拟进程。
所以在C#里我做了一个:
ps.Commands.AddCommand("Get-Command");它显示了作为命令列出:
结果:
函数Get-AppvVirtualProcess 1.0.0.0 A
我尝试使用以下方法手动加载C#中的模块:
InitialSessionState initial = InitialSessionState.CreateDefault();
initial.ImportPSModule(new string[] {@"C:\Program Files\Microsoft Application Virtualization\Client\AppvClient\AppvClient.psd1" });和
ps.Commands.AddCommand("Import-Module").AddArgument("AppvClient");但是它仍然给了我上面提到的同样的错误。
C#中的代码如下所示:
public static void powershellCommand()
{
Collection<PSObject> result;
using (Runspace myRunSpace = RunspaceFactory.CreateRunspace())
{
InitialSessionState initial = InitialSessionState.CreateDefault();
initial.ImportPSModule(new string[] {@"C:\Program Files\Microsoft Application Virtualization\Client\AppvClient\AppvClient.psd1" });
Runspace runspace = RunspaceFactory.CreateRunspace(initial);
runspace.Open();
PowerShell ps = PowerShell.Create();
ps.Runspace = runspace;
ps.Commands.AddCommand("Import-Module").AddArgument("AppvClient");
ps.Commands.AddCommand("Get-AppvVirtualProcess");
result = ps.Invoke();
var builder = new StringBuilder();
foreach (PSObject psObject in result)
{
builder.Append(psObject.ToString() + "\n");
builder.ToString();
}
Console.WriteLine("Virtual Process: {0}", builder.ToString());
}
}除了Runspace之外,我也尝试了这一点,但是我得到了相同的错误:
public static void p()
{
using (var powershell = PowerShell.Create())
{
powershell.AddCommand("Get-AppvVirtualProcess");
powershell.Invoke();
}
}发布于 2017-03-29 06:15:52
您可以尝试遍历所有正在运行的流程,并找到加载了AppVEntSubsystems32.dll或AppVEntSubsystems64.dll的进程。
您可以在这里阅读更多关于这一点的信息:https://blogs.msdn.microsoft.com/gladiator/2014/09/04/app-v-5-on-application-launch/
https://stackoverflow.com/questions/43074035
复制相似问题