2010-05-24 100 views

回答

2

排序的。您需要打開特定的命名管道,然後發送命令。據我所知,你將不得不寫一個(不可否認的是非常小)的腳本或應用程序來做到這一點,但是那時腳本可以被包裝在一個批處理文件中。

管道名稱是:
TortoiseHgRpcServer-bc0c27107423- [用戶名]
(用於計算機,我就可以寫這纔是TortoiseHgRpcServer-bc0c27107423-nholley)

的命令是:
更新| [路徑到更新]
(所以我的測試使用更新| C:\項目\ scripts)中

短的C#命令行應用程序做,這是

using System; 
using System.IO; 
using System.IO.Pipes; 

namespace NamedPipeTest 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var username = Environment.UserName; 
      using (var pipe = new NamedPipeClientStream("TortoiseHgRpcServer-bc0c27107423-" + username)) 
      { 
       try 
       { 
        pipe.Connect(1000); 

        using (var sw = new StreamWriter(pipe)) 
        { 
         sw.Write("update|" + args[0]); 
        } 
       } 
       catch (TimeoutException ex) 
       { 
        Console.WriteLine("Named pipe could not be found. Please restart TortoiseHgOverlayServer"); 
        Console.WriteLine("Press any key to continue..."); 
        Console.ReadKey(); 
       } 
      } 
     } 
    } 
} 

這應該至少讓你開始。值得注意的是,瀏覽器外殼似乎調用刪除| [路徑]後續更新| [路徑],但我不能說,刪除步驟實際上是必要的,當我在上面的程序中嘗試這樣做,我會得到第二個命令後,「管道已損壞」異常,但該命令實際上已將其傳送到覆蓋服務器。知道更多關於命名管道的人可能很容易解決這個問題。

如果你想鑽研它在https://bitbucket.org/tortoisehg/thg/src/bcf0eaf6db6a/TortoiseHgOverlayServer.py

Whee多看一看,這很有趣!

編輯:使用正確的關鍵字爲語言,並添加了更多的錯誤檢查。

+0

我改變了第一個使用的[import]語句。這使得它編譯,但它無限期地停留在黑屏 – 2011-05-09 22:09:28

+0

由於某種原因,TortoiseHgOverlayServer失去了在命名管道上的句柄。一個簡單的超時檢查和try-catch可以解決這個問題。你當然可以擴展它來自動重啓該exe,但這超出了這個問題的範圍。 – neilh 2011-05-09 23:43:38

相關問題