Autor Beitrag
Kasko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 117

Win 10
C# C++ (VS 2017/19), (Java, PHP)
BeitragVerfasst: Di 12.01.21 20:18 
Wenn ich eine Datei mit ihrer Standardanwendung öffnen möchte, verwende ich einfach:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
ProcessStartInfo startInfo = new ProcessStartInfo() {
    FileName = filePath,
    /*WorkingDirectory = new FileInfo(filePath).DirectoryName*/ // war ein Versuch gegen das Problem aber funktioniert nicht
};
    
Process.Start(startInfo);


Es gibt jedoch ein Problem: Wenn ich eine MP4-Datei aus einem Verzeichnis im Windows Explorer heraus öffne, wird die Datei mit Microsoft Movies & TV geöffnet. Die App erhält aber auch Informationen zu anderen Dateien im selben Verzeichnis, da die Möglichkeit besteht, zum nächsten Video zu wechseln. Dies funktioniert nur, wenn ich mich beim Öffnen im angegebenen Verzeichnis im Windows Explorer befinde. Wenn ich zum Beispiel den Schnellzugriff zum Öffnen der Datei verwende oder durch spezifisches Dateisuchen in dem Verzeichnis nur eine Datei zu sehen ist, kann ich nicht zu anderen Dateien wechseln, obwohl sich andere Videos im Verzeichnis befinden.

Ich habe eine cleane Konsolen-App erstellt, um alle Parameter auszugeben, und dann eine MP4-Datei damit geöffnet:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
static void Main(string[] args) {
    Console.WriteLine(args.Length);
    Console.WriteLine();
    
    foreach (string s in args)
        Console.WriteLine(s);
    
    Console.ReadKey();
}


Unabhängig davon, von wo aus ich diese App öffne (innerhalb des Verzeichnisses, Schnellzugriff, ...), wird immer Folgendes ausgegeben:

ausblenden Quelltext
1:
2:
3:
1
    
D:\Videos\Video1.mp4


Dieselben Parameter führen also zu unterschiedlichem App-Verhalten.

Woher kommen diese zusätzlichen Informationen und wie können sie in Process.Start hinzugefügt werden? Ist in der Registry etwas registriert, welche Parameter an eine bestimmte App übergeben werden sollen? Wenn ja, wie erhalte ich diese Informationen? Ist das eine Eigenheit von UWP-Anwendungen?

Edit:
Okay, ich habe den Grund gefunden. Es ist die FileActivatedEventArgs.NeighboringFilesQuery. Nun stellt sich die Frage, wie ich diese Query beim Starten des Prozesses übergeben kann?