2013-01-18 113 views
3

我正在Windows RT中開發應用程序。我確實需要在Windows RT(C#)中運行/調用PowerShell或CMD命令。請幫助我弄清楚。 在此先感謝Windows RT中的Powershell命令

+0

你不能使用正常的C#API的PowerShell(未測試)?恩。 http://www.codeproject.com/Articles/18229/How-to-run-PowerShell-scripts-from-C –

+0

Graimer謝謝你的回覆。在發佈此查詢之前,我在codeproject中檢查了文章,但名稱空間system.management.automation在Win RT中受到限制。 – sathia

回答

1

雖然無法直接針對Windows RT中的PowerShell .NET引擎編程,但可以通過套接字訪問桌面。但是,這假定您有能力確保桌面套接字偵聽器已安裝&正在運行。但是,在運行&的情況下,您可以向其發出命令並讓其調用cmd.exe(或通過EXE或in-proc引擎的powershell)。在WinRT中有什麼好處是可以使用PowerShell遠程端點連接到&的引擎組件。考慮到最終只是一個套接字,可以由微軟以外的人來完成,但你必須通過很多WS-MAN協議來弄清楚它是如何工作的。我想通過套接字發送一個簡單的字符串可能會更簡單,例如'powershell -command "& { Get-Process }"''cmd /c dir c:\'。 :-)

下面是一些代碼片段作爲一個概念證明:

WinRT的代碼片段:

private async void _button_OnClick(object sender, RoutedEventArgs e) 
{ 
    string content; 
    try 
    { 
     var client = new HttpClient(); 
     client.DefaultRequestHeaders.Add("user-agent", 
      "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)"); 
     var response = await client.GetAsync("http://localhost:54649/"); 
     if (response.StatusCode == HttpStatusCode.OK) 
     { 
      content = await response.Content.ReadAsStringAsync(); 
     } 
     else 
     { 
      content = response.StatusCode.ToString(); 
     } 

    } 
    catch (Exception ex) 
    { 
     content = ex.Message; 
    } 

    await this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,() => 
    { 
     _textBlock.Text = content; 
    }); 
} 

在桌面端,這裏有一個腦死亡MVC控制器的一個片段:

public class HomeController : Controller 
{ 
    // 
    // GET: /Home/ 
    public string Index() 
    { 
     return "Hello World. The time is " + DateTime.Now; 
    } 
} 
+0

親愛的基思謝謝你的回覆。我搜索了網絡爲win rt創建桌面套接字,但徒勞無功。請指導我爲Win rt創建桌面套接字 – sathia