Windows Shell-Integrationsbefehl funktioniert nicht, möglicher Syntaxfehler

743
barerd

Ich möchte eine Shell-Erweiterung erstellen, um glänzende Apps in einem lokalen Prozess auf einem Windows 7 Professional 64-Bit auszuführen . Ich brauche einen Befehl wie R -e "shiny::runApp('~/shinyapp')"definiert in der glänzenden Tutorial Webseite . Normalerweise erstelle ich ein Verzeichnis, das shinyin jedem Datenordner, den ich habe, aufgerufen wird. Der vermeintliche Befehl sollte also immer so sein:R -e "shiny::runApp('%1'/shiny) for me."

Also habe ich einen Schlüssel namens "Shine!" und einen Unterschlüssel namens "command" in HKEY_CLASSES_ROOT \ Directory \ shell mit einem Wert. C:\Program Files\R\R-2.15.1\bin\x64\R.exe -e "shiny::runApp('%1/shiny')"Die dir-Struktur in regedit lautet wie folgt:

enter image description here

Wenn ich nun mit der rechten Maustaste auf den Datenordner (der den glänzenden Ordner enthält) und auf "Shine!" Klicke, wird eine R-Konsole (eine Cmd-Konsole) geöffnet und geschlossen. Die App funktioniert jedoch nicht (die Apps werden gründlich geprüft und funktionieren.) Ich habe auch den Befehl regedit in cmd überprüft.

Um ehrlich zu sein, ich kenne weder C, Windows Shell noch MSDN. Ich habe einige Fragen, Links und Dokumente geprüft, zog es jedoch vor, eine einfache Lösung ohne Fehlerprüfung zu finden (fehlender Ordner usw.).

Ich denke, mir fehlt hier ein Syntaxfehler, also habe ich mehrere Versionen ausprobiert, wie zB nur '%1'und Rechtsklick auf den glänzenden Ordner, auch Versionen wie '/'%1/'/shiny'usw. Was ist falsch und was noch wichtiger ist, wie kann ich einen Rechtsklick mit dem% debuggen? 1 sache, während sich das cmd-fenster so schnell wie hölle schließt?

0

2 Antworten auf die Frage

0
Maximus

Verwenden Sie ProcessMonitor, um die genauen Argumente und das Arbeitsverzeichnis von R zu bestimmen. Wenn Sie diese Werte erhalten, können Sie Ihren Debugger mit denselben Einstellungen einrichten.

Sie meinen [technet] (http://technet.microsoft.com/tr-tr/sysinternals/bb896645.aspx), richtig? Ich habe es ausprobiert und Prozessname gefiltert: Rterm.exe. Wenn ich mit der rechten Maustaste auf "Shine!" Klicke, wird die Prozessnummer um ~ 3600 erhöht. Ich werde versuchen, dieses Werkzeug zu erlernen, aber im Moment scheint es ein Overkill für mich zu sein. barerd vor 11 Jahren 0
Warum sprechen Sie über Rterm.exe, wenn Sie R.exe ausführen? Ausgabe nach Vorgang filtern. Es wird "Prozess starten" sein, wie ich mich erinnern kann ("Operation" - "enthält" - "Prozess"). Dadurch erhalten Sie eine kurze Liste, die leicht zu analysieren ist. Maximus vor 11 Jahren 0
Oh, ich verstehe, die Operation enthält Prozessstart und dann zeigen die Eigenschaften die gesamte Umgebung und die Befehlszeile usw. an. Ich suche immer noch nach der richtigen Syntax. barerd vor 11 Jahren 0
0
Eelco L.

% 1 wird von der Windows-Shell um den Namen des Ordners erweitert, auf den Sie mit der rechten Maustaste geklickt haben.

Wenn der Befehl, den Sie ausführen möchten, lautet:

"C:\Program Files\R\R-2.15.1\bin\x64\R.exe" -e "shiny::runApp('%1/shiny')" 

Sie können es durch einen Aufruf an cmd.exe ersetzen, der nach der Ausführung geöffnet bleibt und die Anführungszeichen beibehält (indem Sie sie in einem zusätzlichen Paar Anführungszeichen verdoppeln), sodass Sie die Befehlsausgabe von r.exe überprüfen können:

cmd /k " ""C:\Program Files\R\R-2.15.1\bin\x64\R.exe"" -e ""shiny::runApp('%1/shiny')"" " 

Ich habe keine Erfahrung mit R, aber ich vermute, dass der runApp-Befehl die Backslashes im Windows-Pfad schlecht verarbeitet oder ein Leerzeichen enthält, und ich denke auch, dass "~" mit dem aktuellen Verzeichnis funktioniert, da Windows dies nicht tut. Es gibt ein echtes $ HOME-Verzeichnis.

Die Lösung hierfür besteht darin, einen CD-Befehl und den Aufruf von R.exe über cmd.exe zu verketten:

cmd /c " cd /d ""%~1"" & ""C:\Program Files\R\R-2.15.1\bin\x64\R.exe"" -e ""shiny::runApp('~/shiny')"" " 

(cmd / c schließt das neue Fenster, cmd / k hält es nach der Ausführung geöffnet, sodass das letzte Beispiel das Fenster nach dem Starten von R.exe schließt.)

Sie haben wahrscheinlich recht, was den Windows-Pfadfehler angeht, aber ich konnte nicht zulassen, dass `cmd / k` mit den Anführungszeichen funktioniert. [Diese Antwort] (http://stackoverflow.com/a/8714013/664404) besagt, dass das korrekte Format für den Schalter / k wie cmd / k "code" ist. Ich habe versucht, cmd / k "C: \ Programme \ R \ R-2.15.1 \ bin \ R.exe" -e "glänzend :: runApp ('% 1')" "` `zu verwenden, funktionierte aber auch nicht . Ich habe versucht, das doppelte Anführungszeichen mit ^ oder "" gemäß [dieser Frage] (http://stackoverflow.com/q/7760545/664404) zu umgehen. Könnten Sie noch weitere Beispiele nennen? barerd vor 11 Jahren 0
Etw in Anführungszeichen in doppelte Anführungszeichen einschließen bedeutet, dreifache Anführungszeichen um viele Dinge herum zu verwenden. So, jetzt "cmd / c" cd% 1 & "" "C: \ Programme \ R \ R-2.15.1 \ bin \ x64 \ R.exe" "" -e "" "glänzend :: runApp (" 'shiny' ")" "" "` funktioniert, aber der Schalter / c schließt das cmd-Fenster nicht. Es tut eigentlich nicht weh, es ist gut genug, dass ich das Ganze nicht tippen muss, aber gibt es einen Trick, um das cmd-Fenster zu schließen? barerd vor 11 Jahren 0