2017-03-28 14 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 명령 줄을 사용하는 경우, 그것은 잘 작동하고 가상 프로세스를 나열한다는 것입니다.

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

그것은 명령으로-AppvVirtualProcess을하기 나열 보여줍니다 :

그래서 C#에서 내가했던

결과 : 나는 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"); 

하지만 여전히 위에서 언급 한 것과 같은 오류가 발생합니다. 나뿐만 아니라이 시도 대신에 실행 영역의

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

} 

을하지만 난 같은 오류 얻을 :

는 C#에서 코드는 다음과 같습니다

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

     powershell.Invoke(); 
    } 
} 

답변

0

당신은 반복을 시도 할 수 있습니다를 모든 프로세스를 실행하고 AppVEntSubsystems32.dll 또는 AppVEntSubsystems64.dll을로드 한 프로세스를 찾습니다.

당신은 여기에 대한 자세한 읽을 수 있습니다 : https://blogs.msdn.microsoft.com/gladiator/2014/09/04/app-v-5-on-application-launch/

+0

이 DLL에 대한 프로세스 탐색기에서 검색 수동 및 programattic 없습니다. 정확한 결과를 얻기위한 최선의 방법은 아닙니다. 패치 작업과 비슷합니다. 하지만 팁 주셔서 감사합니다! – Amir