首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用AppV获取C#虚拟进程列表

如何使用AppV获取C#虚拟进程列表
EN

Stack Overflow用户
提问于 2017-03-28 15:42:52
回答 1查看 375关注 0票数 2

我试图获得由微软AppV使用C#启动的所有虚拟进程的列表。

我尝试在C#中使用Powershell,但我得到了以下错误:

System.Management.Automation.CommandNotFoundException:‘’命令在模块'AppvClient‘中找到,但无法加载该模块。有关更多信息,请运行“”。

奇怪的是,如果我使用Powershell命令行,它就可以正常工作,并列出虚拟进程。

所以在C#里我做了一个:

代码语言:javascript
运行
复制
ps.Commands.AddCommand("Get-Command");

它显示了作为命令列出:

结果:

函数Get-AppvVirtualProcess 1.0.0.0 A

我尝试使用以下方法手动加载C#中的模块:

代码语言:javascript
运行
复制
InitialSessionState initial = InitialSessionState.CreateDefault();
initial.ImportPSModule(new string[] {@"C:\Program Files\Microsoft Application Virtualization\Client\AppvClient\AppvClient.psd1" });

代码语言:javascript
运行
复制
ps.Commands.AddCommand("Import-Module").AddArgument("AppvClient");

但是它仍然给了我上面提到的同样的错误。

C#中的代码如下所示:

代码语言:javascript
运行
复制
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之外,我也尝试了这一点,但是我得到了相同的错误:

代码语言:javascript
运行
复制
public static void p()
{
    using (var powershell = PowerShell.Create())
    {
        powershell.AddCommand("Get-AppvVirtualProcess");

        powershell.Invoke();
    }
}
EN

回答 1

Stack Overflow用户

发布于 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/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43074035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档