VB.NET CommanLineArgs不从关联文件类型传递

问题描述 投票:1回答:2

我有一个单实例,clickOnce winForm应用程序,它具有相关的文件类型。

当我在调试中运行应用程序,并通过调试设置手动输入命令行args时,Everything按预期工作。将调试debug args中指定的文件,并将其全部转到计划中。

当我实际双击关联的文件类型(在调试或实时)时,命令行arg(%1)由于某种原因未传输到应用程序。它只是不存在。 我的发布>选项>文件关联中设置了文件扩展名。我确实有如下注册表项:

rundll32.exe dfshim.dll, ShOpenVerbExtension {c0a5ac53-477c-4f76-bfc7-aa99e87cbe21} %1

实际上,这会在双击文件时打开应用程序。唯一缺少的是发送文件名(要打开和处理)。

什么可能会导致这样的事情发生?

编辑:可能很重要的是要注意该文件只是一个序列化的对象。目的是在双击文件后反序列化和处理对象。当我使用调试命令行arg时,执行此操作的逻辑已经到位并正常工作。

Environment.GetCommandLineArgs()仅返回(0)中可执行文件的路径。

My.Application.CommandLineArgs.count = 0

.net vb.net clickonce file-type associated-types
2个回答
1
投票

更新

看看这个链接,WPF: Supporting command line arguments and file extensions。那里的代码是C#,但我认为在VB中复制应该很简单。

通过双击自定义文件类型启动。

我创建了一个支持自定义文档格式的应用程序,我想双击该文档来打开我的应用程序。我假设应用程序将正常打开,文档显示为命令行arg,但事实并非如此。相反,它存储在以下绕口令中:

AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData[0]

0
投票

在程序 - 属性页 - 发布 - 选项按钮中您选择“文件关联”说.mp3或其他。这样,强制程序由ClickOnce应用程序部署支持库打开 - 而不是直接打开您的程序!

如果你删除它并手动进入选择文件关联,右键单击文件并选择打开 - 并使用默认值,然后commandlineargs中的%1参数将在那里。

或者,如果您不希望用户这样做。您需要从AppDomain获取其他地方的命令行参数。以下代码允许您拖放应用程序上的多个文件或允许您双击。

    Dim strcmdLineArguments() as String = Environment.GetCommandLineArgs
    If AppDomain.CurrentDomain.SetupInformation.ActivationArguments IsNot Nothing Then
        Dim addInfo() As String = AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData
        i = strcmdLineArguments.Length
        ReDim Preserve strcmdLineArguments(i + addInfo.Length - 1)
        For j = 0 To addInfo.Length - 1
            strcmdLineArguments(i + j) = addInfo(j)
        Next
    End If

这应该是技巧,你的strcmdlinearguments应该有你想要的。忘记添加,第0个元素仍然是你的程序的位置

© www.soinside.com 2019 - 2024. All rights reserved.