2017-03-28 4 views
2

C#を使用してMicrosoft AppVによって開始されたすべての仮想プロセスのリストを取得しようとしています。C#を使用してAppV仮想プロセスのリストを取得する方法

私はC#でPowerShellを使用してみましたが、私はこのエラーを取得:

System.Management.Automation.CommandNotFoundException: 'The 'Get-AppvVirtualProcess' command was found in the module 'AppvClient', but the module could not be loaded. For more information, run 'Import-Module AppvClient'.'

奇妙なことは、私はPowerShellコマンドラインを使用している場合、それだけで正常に動作し、仮想のプロセスをリストしていることです。

だからC#で私がやった:

ps.Commands.AddCommand("Get-Command"); 

、それは-AppvVirtualProcess getコマンドとしてリストを示しています。私はC#でモジュールをロードしようとした

Function Get-AppvVirtualProcess 1.0.0.0 A

結果手動:

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()); 
     } 

} 

、私もこれを試してみましたが、私は同じエラーを取得:

public static void p() 
{ 
    using (var powershell = PowerShell.Create()) 
    { 
     powershell.AddCommand("Get-AppvVirtualProcess"); 

     powershell.Invoke(); 
    } 
} 

答えて

0

あなたはすべてを反復処理しようとすることができプロセスを実行し、AppVEntSubsystems32.dllまたはAppVEntSubsystems64.dllのいずれかをロードしたものを探します。

あなたはここにこの詳細を読むことができます:DLLのためのプロセスエクスプローラでの検索https://blogs.msdn.microsoft.com/gladiator/2014/09/04/app-v-5-on-application-launch/

+0

はマニュアルとprogramatticではありません。これは正確な結果を得るための最善の方法でもありません。よりパッチワークに似ています。しかし、チップのおかげで! – Amir

関連する問題