2013-07-25 57 views
3

我完成了我的程序,將其序列化爲保存並創建了fileopen系統以打開從我的應用程序保存的文件。我甚至在註冊表中創建了與innosetup的文件關聯,這非常好。讀取與打開的程序關聯的序列化文件

現在我想要實現的是,無論何時用戶雙擊程序中保存的文件,程序都應該讀取並反序列化它。

例如,當您雙擊或打開.docx或.doc文件時,將打開Microsoft Word並讀取並打開該文件。目前我的程序會打開,但我不知道如何檢測從文件打開的時間,以便開始反序列化。

注意:反序列化本身不是問題,它正在檢測我是否應該這樣做。

回答

1

當您通過雙擊相關文件啓動程序時,文件名將作爲命令行參數傳入。您指定在您的文件擴展名關聯設置中將出現此參數的位置。

如果您設置的關聯爲:

的Program.exe%1

雙擊您的文件將導致:

Program.exe文件C:\文件夾\ File.ext

這可以使用Environment.GetCommandLineArgs()或從Main(string[] args)方法:

static void Main(string[] args) 
    { 
        if (args.Length > 0) 
        { 
      // Get the argument 
      string fileLocation = args[0]; 

      // Load and deserialize 
      // Do the do 
        } 
    } 

這裏是一個MSDN article on command line arguments

0

謝謝@Macropus,你實際上沒有告訴我我不知道什麼,你指出了我的錯誤。這發生在我上innosetup上innosetup我寫設置

,而不是{app}\program.exe %1的註冊表值,「{應用} \ Program.exe文件」「%1」

它忽視了路徑,打開該文件程序。

所以,當我查詢Environment.GetCommandLineArgs();

只返回路徑的Program.exe,但現在,返回兩個Program.exe文件和文件路徑來調用的程序是從Environment.GetCommandLineArgs()[1]

訪問

爲了使這項工作,當我從一個快捷方式或Program.exe文件本身打開文件, 我做

var comArgs = Environment.GetCommandLineArgs(); 
if (comArgs.Length > 1) 
{ 
    // Then I can deserialize here. 
} 

工作現在謝謝大家。

相關問題