2013-07-25 32 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. 
} 

工作现在谢谢大家。

相关问题