forgottenrealm
Goto Top

Anwendung mit Datei öffnen

Hallo und moinmoin!


Ich habe eine Anwendung erstellt, für die ich Dateien mit einer bestimmten Erweiterung verwende.
Nun ist es ja möglich, in den Projekteigenschaften vom VS2013 unter Veröffentlichen > Optionen > Dateizuordnung den gewünschten Dateityp hinzuzufügen.

Dies funktioniert auch bestens, die Dateien werden dem installierten Programm zugewiesen. Jetzt möchte ich aber noch wissen, welche Datei (=Pfad der Datei) das Programm gestartet hat, wenn ich die Datei z.B. auf dem Desktop angeklickt habe.

Wie komme ich im Programm an diese Datei?

Hoffentlich versteht ihr, was ich meine face-smile
Für Google gingen mir so langsam die Suchmöglichkeiten aus, weil ich selber keine Ahnung habe, nach was ich da suchen soll ...

Freundliche Grüße und ein schönes Wochenende!

Content-ID: 252293

Url: https://administrator.de/contentid/252293

Printed on: December 12, 2024 at 20:12 o'clock

SlainteMhath
SlainteMhath Oct 17, 2014 at 10:23:53 (UTC)
Goto Top
Moin,

Google nach

"<von dir verwendete Programmiersprache> read Commandline"

lg,
Slainte
ForgottenRealm
ForgottenRealm Oct 17, 2014 at 10:55:01 (UTC)
Goto Top
Moin,

An Parameter bzw Commandline habe ich auch schon gedacht, allerdings zeigt mir das Programm beim Start leider nichts an.

    Dim CommandLineArgs As System.Collections.ObjectModel.ReadOnlyCollection(Of String) = My.Application.CommandLineArgs

    Private Sub frm_Start_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        For i As Integer = 0 To CommandLineArgs.Count - 1
            MsgBox(CommandLineArgs(i))
        Next
...

Mein Wunsch ist, dass wenn ich auf eine Datei klicke, das Programm geöffnet wird und die Datei die geöffnet wurde, als Variabel verwendet werden kann.
Ist die Commandline dafür denn überhaupt richtig?
SlainteMhath
SlainteMhath Oct 17, 2014 updated at 11:19:54 (UTC)
Goto Top
Ist die Commandline dafür denn überhaupt richtig?
Ja ist sie.

Schau mal am Command Prompt nach ob dein Programm richtig verknüpft ist:
1.
assoc | findstr (deine extension)

Ergebnis so was wie
.txt=txtfile

2.
ftype | findstr txtfile

Ergbnis sowas wie
txtfile=%SystemRoot%\system32\NOTEPAD.EXE  %1

Das ist die Kommandozeile die aufgerufen wird, %1 wird dabei durch die Datei inkl. kompl. Pfad ersetzt auf die Doppelgeklickt wurde. Ggfs. kannst du mit FTYPE und ASSOC auch die Verknüpfung Extension -> Programm selber konfigurieren.
colinardo
Solution colinardo Oct 17, 2014, updated at Oct 20, 2014 at 06:19:37 (UTC)
Goto Top
Moin,
du baust hier eine ClickOnce-Applikation keine "normale" Anwendung in diesem Sinne.
Normalerweise macht man sowas richtig mit einem Installer-Projekt das die Zuordnung der Dateierweiterung übernimmt, dann funktioniert das so wie du es oben im Code machst.

In deinem Fall musst du es über einen Workaround machen, da der Aufruf deiner Applikationen über die Dateierweiterung anders geschieht.
So sieht das aus wie deine Dateierweiterung mit deiner Anwendung im System von dem Click-Once Installer verknüpft wird:
rundll32.exe dfshim.dll, ShOpenVerbExtension {45366dfd-f8ef-439e-bf14-afaf3d125908} %1
Deswegen geht es mit den normalen Methoden zum Überprüfen der Parameter hier nicht !

Für den Workaround siehe:
http://developingfor.net/2010/06/23/processing-command-line-arguments-i ...

In VB.Net sieht das dann so aus
Dim args As String() = AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData
If Not args Is Nothing Then
    For Each arg As String In args
        MsgBox(arg)
    Next
End If
Grüße Uwe
miniversum
miniversum Oct 17, 2014 at 12:26:18 (UTC)
Goto Top
Hallo
Du hast zwei Möglichkeiten:

1. Du rufst die Übergabeparameter in der Program.cs direkt über die Main ab. Dazu musst du die Main funktion von
static void Main()
in
static void Main(string args)

2. Du kannst die Parameter auch über
string CommandLineArgs = Environment.GetCommandLineArgs();
in ein Array übernehmen. Die Elemente des Arrays kannst du dann auswerten.
Diese Möglichkeit bietet den Vorteil das du sie an einer belibigen Stelle im Code verwenden kannst (muss nicht in der Program.cs sein)
SlainteMhath
SlainteMhath Oct 17, 2014 at 12:31:07 (UTC)
Goto Top
@miniversum
Er programmiert nicht in C# sondern VB ... :P
colinardo
colinardo Oct 17, 2014 updated at 12:45:40 (UTC)
Goto Top
@miniversum
und wie gesagt, nutzen einem die normalen Methoden hier nicht, da es sich so wie der TO beschreiben hat um eine Click-Once Anwendung handelt, welche er mit der Deploy-Methode von Visual Studio veröffentlicht.

Dazu müsste er die App kompilieren und über ein Installer-Projekt(welches die Dateierweiterung setzt) verteilen, ohne die integrierte Deploy-Funktion von VS zu nutzen. Dann wäre es nämlich eine klassische Anwendung, mit der die normalen Methoden zum Abfragen der Parameter wieder funktionieren.
ForgottenRealm
ForgottenRealm Oct 20, 2014 at 06:22:19 (UTC)
Goto Top
Guten Morgen !

Ich danke euch vielmals für die Hilfe, colinardo hatte wieder mal den richtigen Tipp für mich.

Gibt es auch eine Möglichkeit, eine Datei an das Programm zu "übergeben" (= Doppelklick auf die Datei, Programm öffnet sich, Funktion zeigt Name der Datei an), wenn ich das Projekt über VS starte (Debuggen), oder muss ich es wirklich jedes Mal erst exportieren, installieren und testen?

Freundliche Grüße!
colinardo
colinardo Oct 20, 2014 at 08:18:03 (UTC)
Goto Top
Zitat von @ForgottenRealm:
Gibt es auch eine Möglichkeit, eine Datei an das Programm zu "übergeben" (= Doppelklick auf die Datei,
Programm öffnet sich, Funktion zeigt Name der Datei an), wenn ich das Projekt über VS starte (Debuggen), oder muss ich
es wirklich jedes Mal erst exportieren, installieren und testen?
https://social.msdn.microsoft.com/Forums/vstudio/en-US/ff3cda97-8772-4a6 ...

Grüße Uwe