【发布时间】:2019-02-24 22:24:47
【问题描述】:
我正在开发一个 VB.NET Windows 窗体应用程序来编辑扩展名为 *.fltp 的文件,并且我想使用 ClickOnce 部署。但我清单的文件关联部分似乎不起作用。
根据我在 C++ 中编程的时间,我的理解是在 Windows 资源管理器中双击文件会导致 Windows 执行以下操作:
- 扫描注册表以查找文件扩展名(例如,
*.doc) - 在注册表中发现文件扩展名已注册到命令行方案(在本例中为
winword.exe %1) - 运行该命令行(即
winword.exe "Untitled.doc")。
现在,ClickOnce 不提供这种细粒度的控制;在 MSVS 中,我只需转到发布选项并将我的应用程序与 *.fltp 关联。我假设它遵循将App.exe %1 放入注册表的一般模式,并将我的应用程序写入该规范。
当我部署应用程序时,似乎应用程序已注册到*.fltp 文件:它们的图标和描述发生变化,在 Windows 资源管理器中双击它们会打开应用程序。
但是命令行是空白的,所以我的应用程序只是打开了一个空白的新文档!当我放入其中一个文件时
Private Sub Init(sender As Object, e As EventArgs) Handles MyBase.Load
MsgBox(Command)
End Sub
部署的应用程序只显示一个空消息框。 (如果我使用 System.Windows.Forms.Messagebox.Show、System.Environment.GetCommandLine 或 My.Application.CommandLineArgs,也会出现同样的行为——问题不是遗留的 VB 函数。)
注册表项与 C++ 应用程序的注册表项相似,但并不完全相同,因此我无法弄清楚它们的作用。
我如何知道用户双击了哪个文件?
【问题讨论】:
标签: vb.net command-line registry clickonce file-association