Frage

Wie kann man die Befehlszeilenargumente über die Dateivereinigung in Vista 64 übergeben?

Ich habe kürzlich einen PC mit Vista Ultimate 64-Bit gebaut. Ich bemerkte, dass einige der Perl-Skripte, die ich übertragen habe, fehlgeschlagen waren, weil keine Befehlszeilenargumente übergeben wurden. Als einfacher Test habe ich Folgendes geschrieben (foo.pl):

#!/usr/bin/perl -w
use strict;
my $num_args = $#ARGV + 1;
print "${num_args} arguments read\n";
print "$^X\n" # to see what was being used

Ausführen von "foo.pl 1 2 3", die unerwünscht ergab:

0 arguments read
C:\strawberry\perl\bin\perl.exe

Ausführen von "Perl Foo.PL 1 2 3" ergab: erwartet:

3 arguments read
C:\strawberry\perl\bin\perl.exe

Auf meinem alten Windows XP -PC kehrten beide Aufrufe 3 Argumente zurück. Ich habe hier mehr von meinem Sleuthing dokumentiert (Win32.Perl.org Wiki Talk), aber ich habe noch keine Lösung gefunden, die funktioniert.

Ich habe auch ActivePerl-5.10.0.1004-Mswin32-X64-287188.msi probiert.

Jede Hilfe wäre geschätzt. Das macht mich batty.

War es hilfreich?

Lösung

Ich habe gerade ActivePerl-5.10.0.1004-Mswin32-X64-287188.msi auf meinem Vista 64 Ultimate und es funktioniert.

F:\prog\perl>foo.pl 1 2 3
3 arguments read
C:\Perl64\bin\perl.exe

Das bedeutet Devio hat recht: Es muss ein "Dateivereinigung" -Problem sein;

Klicken Sie bei einem Explorer mit der rechten Maustaste auf Ihre .PL-Datei und fragen Sie "Öffnen Sie": Verwenden Sie den "Perl-Befehlszeileninterpreter" und es funktioniert (und wählen Sie "IMMER dieses Programm, um diese Art von Datei zu öffnen").

Für mich scheint "Vistas Dateierweiterungsmanager die Möglichkeit, Argumente an Funktionen zu übergeben", falsch ...


Ich sehe:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Perl\shell\Open\command]
@="\"C:\\Perl64\\bin\\perl.exe\" \"%1\" %*"

Das heißt, wenn Ihre Installation diese Art von Wert nicht in Ihre Registrierung eingebaut hat, liegt dies daran, dass:

  • Sie haben während der Einrichtung von ActivePerl-5.10.0.1004-MSWIN32-X64-287188.msi nicht den Zusammenhang ausgewählt
  • Oder Ihr Konto hat nicht genug Privileg, etwas in der Registrierung zu schreiben.

Notiz:

  • Es scheint \"C:\\Perl64\\bin\\perl.exe\" \"%1\" ohne das %* Streit)
  • Die Addition der Registrierung ist notwendig Wie von der SO dokumentiert

Andere Tipps

Ich weiß nichts über Vista und 64Bits, aber unter "klassischen" Versionen von Windows können Sie die Registrierung bearbeiten:

HKEY_CLASSES_ROOT\.pl 

Enthält Standardzeichenfolge "Perl"

HKEY_CLASSES_ROOT\Perl\shell\open\command 

Enthält die Standardzeichenfolge:

"C:\path-to\Perl\bin\perl.exe" "%1" %*

wobei %* ein Makro für alle Parameter nach dem ersten ist. Wahrscheinlich fehlt der %*.

Der Dateierweiterungsmanager von Vista hat die Möglichkeit entfernt, Argumente an Programme weiterzugeben. Sie müssen die Registrierung manuell bearbeiten, wie Devio erwähnt (oder ein anderes Programm zum Bearbeiten von Dateierweiterungen verwenden).

Interessant für einen Anfänger von Perl ist das auch Argv ist Fallempfindlichkeit ... Verbringen Sie nur eine Stunde damit, herauszufinden, warum meine Befehlszeilenparameter nicht übergeben werden, und es war nur so, dass ich Argv [0] anstelle von Argv [0] verwendet habe ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top