У меня есть одноэкземплярное приложение clickOnce winFrom с соответствующим типом файла.
Когда я запускаю приложение в режиме отладки и вручную ввожу аргументы командной строки через настройки отладки, все работает так, как ожидалось. Файл, указанный в аргументах отладки, обрабатывается, и все идет по плану.
Когда я дважды щелкаю связанный тип файла (либо в режиме отладки, либо в реальном времени), аргумент командной строки (%1) по какой-то причине не передается приложению. Его просто нет.
У меня есть расширение файла, установленное в моей публикации> параметры> ассоциации файлов. У меня есть записи реестра следующим образом:
rundll32.exe dfshim.dll, ShOpenVerbExtension {c0a5ac53-477c-4f76-bfc7-aa99e87cbe21} %1
Это действительно открывает приложение при двойном щелчке файла. единственное, чего не хватает, это имя отправляемого файла (для открытия и обработки).
Любые идеи, что может привести к чему-то подобному?
РЕДАКТИРОВАТЬ: может быть важно отметить, что файл является просто сериализованным объектом. Цель состоит в том, чтобы десериализовать и обработать объект после двойного щелчка по файлу. Логика для этого уже существует и работает, когда я использую аргумент командной строки отладки.
Environment.GetCommandLineArgs() возвращает только путь к исполняемому файлу в (0).
My.Application.CommandLineArgs.count = 0
2 ответа
Обновить
Взгляните на эту ссылку, WPF: поддержка аргументов командной строки и расширений файлов. Код там C#, но я думаю, что его должно быть просто продублировать в VB.
Запуск с помощью двойного щелчка по пользовательскому типу файла.
Я создал приложение, которое поддерживает пользовательский формат документа, и мне нужно было дважды щелкнуть этот документ, чтобы открыть мое приложение. Я предполагал, что приложение откроется нормально с документом, представленным в виде аргумента командной строки, но это не так. Вместо этого он хранится в следующей скороговорке:
AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData[0]
В программе - страница свойств - в разделе «Публикация» - кнопка «Параметры». Вы выбрали «Ассоциации файлов», скажем, .mp3 или что-то еще. ЭТО заставляет программу открываться библиотекой поддержки развертывания приложений ClickOnce, а не вашей программой напрямую!
Если вы удалите это и вручную выберете ассоциации файлов, щелкните файл правой кнопкой мыши и выберите «Открыть с помощью -» и используйте по умолчанию, тогда параметр %1 в commandlineargs будет там.
В качестве альтернативы, если вы не хотите, чтобы пользователь делал это. Вам нужно получить аргументы командной строки в другом месте — из 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-й элемент по-прежнему будет местоположением вашей программы.
Похожие вопросы
Связанные вопросы
Новые вопросы
.net
НЕ используйте для вопросов о .NET Core - используйте вместо этого [.net-core]. .NET Framework - это программная среда, предназначенная главным образом для операционной системы Microsoft Windows. Он включает в себя реализацию библиотеки базовых классов, общеязыковой среды выполнения (обычно называемой CLR), общей системы типов (обычно называемой CTS) и динамической среды исполнения. Он поддерживает множество языков программирования, включая C #, VB.NET, F # и C ++ / CLI.