打开时读取与程序关联的序列化文件
本文关键字:关联 序列化 文件 程序 读取 | 更新日期: 2023-09-27 18:24:50
我已经完成了我的程序,将其序列化以进行保存,并创建了一个fileopen系统来打开从我的应用程序中保存的文件。我甚至在注册表上创建了一个与innosetup的文件关联,它运行得非常好。
我现在想要实现的是,每当用户双击程序中保存的文件时,程序都应该读取并反序列化它
例如,双击或打开.docx或.doc文件时,将打开Microsoft Word并读取并打开该文件。目前我的程序将打开,但我不知道如何检测何时从文件中打开它,以便开始反序列化。
注意:反序列化本身不是问题,它检测我是否应该这样做。
双击关联文件启动程序时,文件名会作为命令行参数传入。您可以指定此参数在文件扩展名关联设置中的位置。
如果您将您的关联设置为:
program.exe%1
双击您的文件将导致:
program.exe C:''Folder''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文章。
谢谢@Macropous,你实际上没有告诉我我不知道的事情,你指出了我的错误。当我在innosetup 上设置注册表值时,就会发生这种情况
我写的不是innosetup上的{app}'program.exe %1
,而是"{app}''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.
}
现在开始工作,谢谢大家。