Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 打开文件关联将使用空白命令行启动ClickOnce应用程序_Vb.net_Command Line_Registry_Clickonce_File Association - Fatal编程技术网

Vb.net 打开文件关联将使用空白命令行启动ClickOnce应用程序

Vb.net 打开文件关联将使用空白命令行启动ClickOnce应用程序,vb.net,command-line,registry,clickonce,file-association,Vb.net,Command Line,Registry,Clickonce,File Association,我正在开发一个VB.NET Windows窗体应用程序来编辑扩展名为*.fltp的文件,我想使用ClickOnce部署。但是我清单中的文件关联部分似乎不起作用 从我在C++中的时间编程中,我的理解是在Windows资源管理器中双击一个文件会导致Windows进行以下动作: 扫描注册表中的文件扩展名,比如,*.doc 在注册表中发现文件扩展名已注册到命令行方案(在本例中为winword.exe%1) 运行该命令行,即winword.exe Untitled.doc。 现在,ClickOnce不提供

我正在开发一个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
部署的应用程序只显示一个空的messagebox。如果我使用System.Windows.Forms.Messagebox.Show、System.Environment.GetCommandLine或My.Application.CommandLineArgs,也会显示相同的行为-出现故障的不是传统的VB函数

<> >注册表项与C++应用程序相似,但不完全相同,因此我无法理解它们的操作。
我如何知道用户双击了哪个文件

您已正确推断ClickOnce不会将文件作为命令行参数传递

这里的问题是ClickOnce通常在应用程序启动时检查应用程序更新。因此,如果ClickOnce使用了C++应用程序所描述的固定注册表模式,Windows可能会在命令行上启动文件应用程序,ClickOnce意识到它需要更新应用程序,快速下载新的可执行文件并更新注册表,并在新进程中启动更新的可执行文件,一路上不小心挤压了命令行。因此,它将文件存储在Appdomain中,执行任何必要的更新操作,然后在子Appdomain中启动应用程序

TL;DR:您需要AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData而不是命令行