Ich muss ein Ruby-Skript im erhöhten Modus (Admin priviledges) unter Windows ausführen. Ist es möglich?
So geht's. Der einfachste Weg besteht darin, Ihre ausführbare Datei mit erweiterten Rechten (Admin) unter Verwendung von ShellExecute
neu zu starten.
Mit Ruby machst du das so:
%Vor%Wenn Sie die Windows-Benutzerkontensteuerung aktiviert haben, erhalten Sie den bekannten Windows-Popup-Dialog, der Administratorrechte anfordert. Sobald Sie auf Ja klicken, wird Ihr Prozess mit Administratorrechten ausgeführt.
Der geheime Trick hier ist die Verwendung des nicht dokumentierten ShellExecute
Operationsparameters runas
, der die angeforderte Operation erhöht.
Auch eine Diskussion darüber, wie man eine Tastaturkürzel mit erhöhten Eingabeaufforderungen manuell erstellen kann (was in einigen Fällen eine ausreichend gute Lösung sein könnte):
Ich möchte Casper und thegreendroid für diese modifizierte Lösung danken.
Ich konnte ihre Beispiele nicht zum Laufen bringen, aber mit etwas mehr Forschung habe ich das zusammengefügt. Ich habe ein bisschen nach execute_command
gesucht, da meine Installation von ruby 1.9.3 nicht wusste, was ich damit machen sollte, und ich konnte nichts finden, also benutzte ich Backticks. Das \
musste mit Escapezeichen versehen werden. Das 2>&1
Bit ist so, dass ruby die Ausgabe statt einer leeren Zeichenfolge erhält und wenn diese Ausgabe mit der Regexp /ERROR/
übereinstimmt, dann haben Sie keine Administratorrechte, also wollen wir, dass sie nil
zurückgibt.
Dies wird sich mit administrativen Privilegien neu starten und dann laden, was auch immer Sie in den require
mit dem Kommentar nach ihm setzen.
Sie können den Block def
löschen und die Anweisung if
in
der Kürze wegen. Sie könnten auch die Variable shell
verlieren:
Möglicher Gotcha: Dies könnte eine Endlosschleife sein, wenn running_in_admin_mode?
wiederholt fehlschlägt, aber es hat perfekt für mich funktioniert.
Dank anderer Autoren bin ich damit zur Arbeit gekommen (getestet auf Windows 8):
Fügen Sie dies am Anfang eines Ruby-Skripts hinzu:
%Vor%Oder Sie könnten einfach eine launcher.cmd mit
haben %Vor%und starten Sie diese CMD-Datei mit Administratorrechten
Sobald du mit Ruby getestet hast, kannst du Rubyw ausprobieren
Eine andere Methode besteht darin, sicherzustellen, dass Sie Ihr Skript nicht im Nicht-Admin-Modus ausführen. Ich habe festgestellt, dass diese Lösung meiner Erfahrung nach zufriedenstellend ist.
Es kann festgestellt werden, ob ein Skript im Admin-Modus läuft -
%Vor%Der Dank geht an Peter McEvoy für seine Antwort hier
Ich arbeite an Concept Maps-Anwendung, die eine Reihe von Knoten und Links hat. Ich habe die Verbindungen zu Knoten verbunden, indem ich die Mitte des Knotens als Referenz verwende. Da ich Knoten mit unterschiedlicher Größe und Form habe, ist es nicht ratsam, einen Pfeilkopf für die Verbindung zu zeichnen, indem die Höhe oder Breite der Form angegeben wird. Meine Herangehensweise besteht darin, einen Link von einem Knotenpunkt zu erstellen, Pixel für Pixel, bis der nächste Knoten erreicht ist (hier haben die Knoten eine andere Farbe als der Hintergrund), und dann auf den Pixelwert, den ich erreichen möchte Entscheide den Schnittpunkt von Link und Knoten, der eigentlich die Koordinate zum Zeichnen der Pfeilspitze ist.
Es wäre großartig, wenn ich dabei helfen könnte.
Beispielcode: Ссылка
Hier sind die grünen Quadrate Knoten und die Linie, die vom linken Quadrat beginnt und in das rechte Quadrat eintritt, ist die Verbindung. Ich möchte, dass der Pfeil am Schnittpunkt von Link und rechtem Quadrat gezeichnet wird.
Ich habe ein Beispiel dafür erstellt. Ich benutze Bresenhams Linienalgorithmus , um die Linie von ganzen Leinwandpixeln zu durchlaufen und das Alpha an jedem Punkt zu überprüfen; Wann immer es einen Schwellenwert überschreitet, nehme ich das als Kandidat auf. Ich verwende dann die ersten und letzten solcher Punkte, um einen Pfeil (mit richtig gedrehter Pfeilspitze) zu zeichnen.
Hier ist das Beispiel: Ссылка
Aktualisieren Sie das Beispiel, um einen neuen zufälligen Testfall zu sehen. Es 'scheitert', wenn Sie eine andere 'Form' haben, die bereits einen der Endpunkte überlappt. Eine Möglichkeit, dies zu lösen, wäre, Ihre Formen zuerst auf eine leere Leinwand zu zeichnen und dann das Ergebnis ( %code% ) auf die endgültige Leinwand zu kopieren.
Für Stack-Überlauf-Nachfahren (für den Fall, dass meine Seite nicht erreichbar ist) ist hier der relevante Code:
%Vor%