2009-01-14 6 views
5

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

baute ich vor kurzem einen PC mit Vista Ultimate 64-bit. Ich habe festgestellt, dass einige der Perl-Skripts fehlgeschlagen sind, weil Befehlszeilenargumente nicht übergeben wurden. Als einfacher Test, schrieb ich folgendes (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 

Running "foo.pl 1 2 3" in unerwünschter Weise ergab:

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

Running „perl foo.pl 1 2 3 "expectedly ergab:

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

Auf meinem alten Windows XP PC, kehrte beide Anrufungen 3 Argumente. Ich habe hier mehr von meinem Detektiv dokumentiert (win32.perl.org wiki talk), aber ich muss noch eine Lösung finden, die funktioniert.

Ich habe auch versucht ActivePerl-5.10.0.1004-mswin32-x64-287188.msi ohne Erfolg.

Jede Hilfe wäre willkommen. Das treibt mich verrückt.

Antwort

9

Ich habe gerade versucht ActivePerl-5.10.0.1004-mswin32-x64-287188.msi auf meinem Vista 64 Ultimate und es funktionierte.

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

Das bedeutet, devio is right: es muss eine "Dateizuordnung" Thema sein;

Auf einem Explorer, klicken Sie mit der rechten Maustaste auf Ihre .pl-Datei und fragen Sie "Öffnen mit": Verwenden Sie den "Perl Command Line Interpreter" und es funktioniert (und wählen Sie immer dieses Programm verwenden, um diesen Dateityp zu öffnen)).

Für mich „Vista Dateierweiterung Manager die Fähigkeit entfernt Argumente an Funktionen übergeben“ scheint falsch ...


sehe ich:

Windows Registry Editor Version 5.00 

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

Bedeutung, wenn die Installation nicht diese Art von Wert in der Registry gesetzt hat, ist es, weil:

  • Sie nicht den Verein ausgewählt haben während die Einrichtung von ActivePerl-5.10.0.1004-mswin32-x64-287188.msi
  • oder Ihrem Konto hat nicht genug Privileg etwas in der Registrierung zu schreiben.

Hinweis:

  • es auf Vista den regelmäßigen Extension-Manager scheint nicht passieren Argument (\"C:\\Perl64\\bin\\perl.exe\" \"%1\" ohne %* Argument Bedeutung)
  • die Zusatz-Registrierung ist erforderlich as documented by the SO
+0

ich deinstalliert und neu installiert sicherzustellen Verein wurde ausgewählt (Standard) und ich bin ein Verwalter Aber alles funktionierte wie erwartet, nachdem ich es importiert habe, indem ich deinen Codeblock als pl.reg kopiere und einfügen Danke! (jetzt, um zu sehen, ob das für Erdbeere perl funktioniert) – vlee

+0

Der Erweiterungsmanager ist ein bestimmtes Programm, das kommt ... Ich vergesse den genauen Namen, aber es Sie können nur ein Programm auswählen, anstatt Ihnen die Möglichkeit zu geben, die Befehlszeile zu ändern, die das Programm wie WinXPs Erweiterungseditor aufruft. – Powerlord

+0

@R. Bemrose: Richtig, ich verstehe deine Antwort jetzt besser. Ich werde versuchen, das morgen zu überprüfen. – VonC

7

Sie wissen nicht, über Vista und 64-Bit, aber unter "klassischen" Versionen von Windows können Sie die Registrierung bearbeiten:

HKEY_CLASSES_ROOT\.pl 

enthält Standard-String "Perl"

HKEY_CLASSES_ROOT\Perl\shell\open\command 

enthält die Standard string:

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

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

+0

Ich sehe nur die folgenden HKEY_CLASSES_ROOT \. Pl \ Perl \ (default) = (Wert nicht gesetzt) ​​ HKEY_CLASSES_ROOT \. Pl \ Perl \ ShellNew \ (default) = (Wert nicht gesetzt) ​​ Ich entdeckte% * Syntax in meinem win32.perl.org sleuthing. Vista verwendet die „assoc“ und „ftype“ Funktionen, die ich bereits versucht, ohne Erfolg zu modifizieren :( – vlee

+0

Der eigentliche Befehl ist in HKEY_CLASSES_ROOT \ Perl \ shell \ Open \ command, meine Antwort unten – VonC

+0

Da die Befehlszeile finden Sie in der Perl-Interpreter finden wenn Sie eine .pl-Datei zu starten, muss der Verband * * irgendwo werden. suchen Sie die Registrierung für „perl.exe“, und sehen Sie, ob Sie diese Informationen anwenden können – devio

2

Vista Dateierweiterung Manager entfernt die Möglichkeit, Argumente für Programme zu übergeben. Sie müssen die Registrierung wie Devio-Erwähnungen manuell bearbeiten (oder ein anderes Programm verwenden, um Dateierweiterungen zu bearbeiten).

0

Auch interessant für einen Perl-Anfänger ist das ARGV ist case-sensitive ... nur eine Stunde damit verbringen, warum Parameter meiner Befehlszeilen, um herauszufinden, sind nicht vergangen, und es war nur, dass ich verwenden argv [0] anstelle von ARGV [0] ...

+1

Bei allen Perl-Variablennamen wird zwischen Groß- und Kleinschreibung unterschieden. Sicherlich ist das in den meisten Programmiersprachen der Fall (!)? –

+0

Ich glaube, ich habe nur verwendet, um mit argv und argc mit kleinen Buchstaben geschrieben (siehe Java), so dass ich nicht die Aufmerksamkeit in den Beispielen auf die Rechtschreibung zahlen ... – TheEye