2015-01-02 27 views
4

我已經成功地創建自己的文件擴展名下面這個教程處理:http://www.codeproject.com/Articles/17023/System-File-Association自己的文件擴展名 - 雙擊不超過文件路徑

到目前爲止,它完美的作品。我只有一件我無法解決的事情。 當我雙擊帶有擴展名的文件時,我的程序打開。現在,我想在我的程序中執行一個操作。我在這裏通過一些線程,並讀取文件路徑自動傳遞給啓動參數。

問題是沒有單個參數傳遞,也是Process.GetCurrentProcess()。StartInfo.FileName返回一個空字符串。我認爲這是連續的,因爲在雙擊我的文件時我沒有傳遞任何參數。

這是我的代碼:

var fai = new FileAssociationInfo(".extension"); 
if (!fai.Exists) 
{ 
    try 
    { 
     fai.Create("My Extension Program"); 

     var pai = new ProgramAssociationInfo(fai.ProgId); 
     if (!pai.Exists) 
     { 
      pai.Create("My Program File", 
      new ProgramVerb("Open", Application.ExecutablePath); 
      pai.DefaultIcon = new ProgramIcon(Application.ExecutablePath); 
     } 
    } 
} 

正如你可以看到我只能通過應用程序來打開它的路徑。但是,我現在怎麼能通過文件路徑作爲參數?我見過例如文章的作者通過「%1」作爲論據,我也嘗試過,但沒有任何改變。

在此先感謝。

回答

2

嗯,我明白了。我所要做的是在ClassesRoot中創建一個子項:「ProgramName \ shell \ open \ command」。然後設置一個包含應用程序路徑的值並將「%1」附加到它上面,然後就完成了。

2

ProcessStartInfo.FileName通常爲您提供程序可執行文件本身的路徑,而不是在Windows資源管理器中單擊的文件,所以這似乎是錯誤的檢查您的情況。

如果您想使用當前的Process獲取參數,那麼Process.GetCurrentProcess().StartInfo.Arguments應爲您提供一個字符串,其中包含傳遞給該程序的所有參數。如果有多個參數,則需要自己將這些參數解析爲單獨的值。

但是,獲取參數的標準,更簡單的方法是確保您的程序的Main()方法具有簽名static void Main(string[] args){}args已經處理爲單獨的值,因此即使您只將它傳遞給另一個類或將它們存儲在靜態變量中,也可以在此處理它。

%1應確保點擊文件作爲第一個參數(args[0])傳遞給您的程序。

+0

Main-method不提供任何參數,正如我上面所寫的。連續「Process.GetCurrentProcess()。StartInfo.Arguments」爲我提供了一個空字符串,所以基本上沒有任何東西。 「%1」聽起來很有趣,但也沒有任何爭論。 –

相關問題