ShellExecute: Fehler beim Öffnen einer PDF

  • Hallo!

    Ich lasse per ShellExecute eine PDF-Datei öffnen. Solange ich das Script in AutoIt laufen lasse funktioniert alles. Aber sobald ich das Script kompiliere und die EXE aufrufe wird die PDF-Datei nicht geöffnet. Adobe ist aber im Hintergrund geöffnet, aber dafür zwei Reader-Hintergrundprozesse. Dieses Problem scheint aber nur den Adobe-Reader zu betreffen. Lasse ich die PDF-Datei in Edge öffnen (Edge ist dabei als Standardprogramm zugeordnet) funktioniert es korrekt. In VBA funktioniert es mit ShellExecute dagegen. Lässt sich das Problem lösen? PDF-Datei soll mit dem Standard-PDF-Programm geöffnet werden. Danke!

    Gruß, René

    Windows 10 (1703, Build 15063.483)

  • Poste doch bitte mal das Skript hier. Vielleicht t liegt es an Pfad- Angaben. Ach, dieses Handy...

    neben AutoIt jetzt auch noch in C/C++, Java und Python aktiv :)
    Stand 04.04.2018, 13:34

  • Am Pfad dürfte es nicht liegen.

    So:

    AutoIt
    $sAnleitung = @ScriptDir & "\Anleitung\Deutsch.pdf"
    ShellExecute($sAnleitung, "", @ScriptDir, "open")


    Oder einfach:

    AutoIt
    $sAnleitung = @ScriptDir & "\Anleitung\Deutsch.pdf"
    ShellExecute($sAnleitung)

    Beides funktioniert kompiliert nicht.

  • Hallo @mumpel !

    Wie @olfibits bereits richtig angemerkt hat :
    Poste bitte mal ein rudimentäres, aber lauffähiges Skript, welches den Fehler reproduzierbar erzeugt.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Gerade mal schnell auf dem Surface (Windows 10 Insider Preview) getestet. Da läuft der Code. Es muss aber einen Grund geben weshalb es unter "Windows 10 Creator" nicht läuft?!

  • @mumpel !

    Test auf meinem Arbeitsrechner (OS = Win 7 Pro - 64-Bit) :
    Hier verwende ich keinen AdobeReader, sondern Sumatra als Standardprogramm.
    Ergebnis : Beide Varianten, sowohl aus AutoIt heraus und auch .exe funktionieren !

    Test auf meinem alten Notebook (OS = Win XP Home) :
    Hier ist ein alter AdobeReader drauf.
    Ergebnis : .exe funktioniert !
    Code :
    $sAnleitung = @ScriptDir & "\Anleitung\Deutsch.pdf"
    ShellExecute($sAnleitung, "", @ScriptDir, "open")


    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Damit funktioniert es garnicht, weder in AutoIt noch kompiliert. Ich sehe nur dass da kurz ein kleines Fenster (das wird die Kommandokonsole, cmd, sein) aufgeht und gleich wieder verschwindet.

  • Das lange rumeiern um das eigentliche Problem kommt davon dass du eben nicht alles postest was gefragt wurde.
    Es wurde nach dem Code gefragt der dieses Verhalten hervorruft.
    Mit sehr großer Wahrscheinlichkeit hast du den Leuten hier aber die Zeile "#RequireAdmin" vorenthalten.
    Die ist aber wichtig!

    Das Problem ist der geschützte Modus des Acrobat Reader.
    Um das Problem zu lösen:

    • Im AR: "Bearbeiten"
    • "Voreinstellungen"
    • "Sicherheit (erweitert)"
    • Haken bei "Geschützten Modus beim Start aktivieren" raus machen.

  • (...) Mit sehr großer Wahrscheinlichkeit hast du den Leuten hier aber die Zeile "#RequireAdmin" vorenthalten (...)

    Hatte ich beim Test nicht drin. Es hat mit und ohne #RequireAdmin nicht funktioniert.


    Das Problem ist der geschützte Modus des Acrobat Reader.

    Danke! Und das soll einer wissen? ;) Kann man den Status irgendwie auslesen, um dem Anwender eine alternative Anzeigemöglichkeit zu bieten? Ich könnte zwar darauf verzichten die Anleitung automatisch anzeigen zu lassen, aber dann liest sie wieder keiner und jeder beschwert sich nur. ;)

  • Hatte ich beim Test nicht drin. Es hat mit und ohne #RequireAdmin nicht funktioniert.

    Äußerst unwahrscheinlich. Ohne Adminrechte sollte es keine Probleme geben.
    Nur bei Vorliegen des Sonderfalles das vorher mit Adminrechten versucht wurde zu starten (die AcroRd32.exe also im Hintergrund läuft) und danach ohne Adminrechte gestartet wurde kommt es auch zu diesem Verhalten.
    Existiert keine laufende AcroRd32.exe und wird das Skript ohne #RequireAdmin gestartet läuft es auch.

    Kann man den Status irgendwie auslesen, um dem Anwender eine alternative Anzeigemöglichkeit zu bieten? Ich könnte zwar darauf verzichten die Anleitung automatisch anzeigen zu lassen, aber dann liest sie wieder keiner und jeder beschwert sich nur.

    Anders gefragt: Warum braucht das Skript unbedingt Adminrechte?

  • @Floops
    Das @SW_HIDE sollte er aber wohl weglassen, oder? ;)

    Das Macro hat (zumindest bei mir) keinerlei Einfluss auf den Adobe Reader, sondern nur auf das cmd-Fenster selbst.

    Damit funktioniert es garnicht, weder in AutoIt noch kompiliert. Ich sehe nur dass da kurz ein kleines Fenster (das wird die Kommandokonsole, cmd, sein) aufgeht und gleich wieder verschwindet.

    Schade, bei mir funktioniert es einwandfrei, benutze aber auch Windows 7.

  • (...) Nur bei Vorliegen des Sonderfalles (...)

    Dann lag gestern irgenwie dieser Sonderfall vor. ;)

    Anders gefragt: Warum braucht das Skript unbedingt Adminrechte?

    Weil Excel mit Administratorrechten gestartet werden muss, denn nur dann hat Excel auch volle Zugriffsrechte auf die Registrierungsdatenbank. Ohne Admin-Rechte hat kein Programm vollen Zugriff, schon garnicht auf die Policies. Und wenn ein User keine Administratorrechte hat, das ist z.B. auf Intranet-Rechnern häufig der Fall (muss auch so sein), soll er das Tool erst garnicht starten dürfen.

  • Kann man #RequireAdmin nicht killen, also auf "Nothing" setzen wenn es zur weiteren Scriptlaufzeit nicht mehr benötigt wird oder den weiteren Scriptablauf stört? Also anstatt es ganz zu Anfang zu setzen setz man #RequireAdmin nur zur Statusbfrage und nach der Statusabfrage "abschalten".

  • Ok weil Excel Adminrechte braucht, braucht dein Skript auch welche.
    Wenn du Excel nur darüber startest könnte man über Umwege auch dafür sorgen das lediglich Excel mit UAC-Prompt aufgerufen wird dein Skript jedoch ohne Admin-Rechte läuft.
    Es gibt nämlich durchaus einen nachvollziehbaren Sinn hinter dem Verhalten vom Acrobat Reader:
    In welcher Welt benötigt ein Dokumentenbetrachter Vollzugriff auf das System? - wofür?
    Es bringt nichts könnte aber Schaden verursachen.

    Am einfachsten wäre es daher für dich den umgekehrten Weg zu gehen.
    Sprich: Dein Skript per #RequireAdmin aufrufen und den ShellExecute-Aufruf mit niedrigeren Rechten durchführen.
    Sieht für deinen Fall dann z.B. so aus:

  • Das kann eine PDF-Datei auch auf eingeschränkten Konten....

    Ja aber dort steht dem (deutlich geringeren) Gefahrenpotential ein Nutzen gegenüber (das Betrachten der PDF). Bei Adminrechten hingegen steht der deutlich vergrößerten Angriffsfläche kein nutzbarer Mehrwert entgegen.

    Eine Begründung für den Aufruf als eingeschränkter User existiert daher während eine solche Begründung für den Aufruf mit Adminrechten nicht existiert.