Jump to content


This is a ready-only archive of the InstallSite Forum. You cannot post any new content here. / Dies ist ein Archiv des InstallSite Forums. Hier können keine neuen Beiträge veröffentlicht werden.
Photo

Diverse Fehler unter Windows 8


6 replies to this topic

Sandor1990

Sandor1990
  • Full Members
  • 33 posts

Posted 20 February 2013 - 11:27

Hallo zusammen,

habe ein Basic MSI Projekt erstellt, welches wunderbar auf Windows XP und 7 (32 und 64 Bit) funktioniert. Unter Windows 8 treten allerdings seltsame Effekte auf, die ich einmal im Folgenden beschreiben möchte.

Zur Vorab Information: Das Setup benötigt administrative Rechte um ausgeführt zu werden. Getestet habe ich in einer Windows 8 VM (64 Bit) mit eingeschalteter Benutzerkontensteuerung (Stufe: Standard).

Am Ende des Setups (um genau zu sein beim Klick auf "Fertigstellen") wird ein Skript aufgerufen, welches mir eine Verknüpfung auf den Desktop erstellt. Das soll auch weiterhin unter Windows 8 der Fall sein (auch wenn der Desktop hier nicht mehr so genutzt wird wie in früheren Windows Versionen). Das Skript funktioniert für mein Setup unter Windows XP und 7 immer.
Anbei das Skript zum Erstellen der Verknüpfung.

CODE

function CreateShortcut_Desktop(hMSI)
STRING szProgramFolder, szItemName, szCommandLine, szWorkingDir, szIconPath;
STRING szProgramDir, szPathToExe;
NUMBER nIcon, nBufferSize;
begin
nBufferSize = MAX_PATH;
MsiGetProperty(ISMSI_HANDLE,"SETUPEXEDIR",szPathToExe,nBufferSize);

if(FoundExe(hMSI)) then
 szProgramDir = FOLDER_DESKTOP;
 szItemName = "Meine Verknüpfung";
 nIcon = 0;
 szCommandLine = "\"" + szPathToExe + "\\..\\MeinProgramm.exe\"";
 szWorkingDir = szPathToExe + "\\..\\";  
 szIconPath = szPathToExe + "\\..\\MeinProgramm.exe";

 AddFolderIcon(szProgramDir, szItemName, szCommandLine, szWorkingDir, szIconPath,0,"",REPLACE);
else
 MessageBox(@IDS_ERROR_COULDNT_FIND_MYPROGRAMM, INFORMATION);
endif;
end;



Bei Ausführung des Setups mit dem zuerst erstellten Benutzer unter Windows 8 (dieser Benutzer ist der Administrator sowie der Gruppe Administratoren zugewiesen):
- Funktionsfähige Verknüpfung auf dem Desktop wird erstellt
- Eine weitere Verknüpfung wird als Tile auf dem Windows 8 Startbildschirm (Metrostyle) erstellt. Diese Verknüpfung zeigt jedoch nach "C:\MeinProgramm.exe" und ist demnach nicht funktionsfähig. Weiß jemand wie ich Windows 8 daran hindere diese Tile zu erstellen bzw. ich es auf den richtigen Pfad zeigen lasse und somit funktionsfähig mache?


Bei Ausführung des Setups mit einem weiteren Benutzer (der lediglich in der Gruppe der Administratoren ist, jedoch nicht der eigentliche Administrator ist):
- Es wird überhaupt keine Verknüpfung erstellt (weder auf dem Desktop noch als Tile). Weiß jemand warum das an dieser Stelle nicht funktioniert? Unter Windows XP und 7 gibt es hierbei keinerlei Probleme.


Wäre Toll, wenn mir jemand weiterhelfen könnte.
Freue mich über jeden sinnvollen Beitrag!

Viele Grüße,
Sand0r

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 20 February 2013 - 16:42

Bin nicht sicher was da vorgeht, aber ein paar Anmerkungen:
1. Ich bin icht sicher, ob das mit den relativen Pfaden offiziell funktioniert.
2. Ich würde zum Zusammenbauen eines Pfades statt + lieber ^ verwenden. Anschließend per LongPathToQuote in Anführungszeichen einbetten.
3. Wenn der Finish Dialog angezeigt wird, sind ggf. die Admin-Rechte schon weg, je nachdem, ob der UAC-Dialog (stell mal auf hoch um ihn zu sehen) schon beim Start der setup.exe kommt oder erst zu Beginn des Kopiervorgangs.
4. Folglich könnte FOLDER_DESKTOP unterschiedliche Werte haben. Hast du dir mal sämtliche fade die du konstruierst anzeigen lassen (z.B. MessageBox mit den Strings).
5. Ist es notwendig, das erst auf dem Finish-Dialog zu machen? Sonst könntest du die Shortcuts vom Windows Instaler anlegen lassen.

Sandor1990

Sandor1990
  • Full Members
  • 33 posts

Posted 21 February 2013 - 09:57

Hallo Stefan,

danke für deine schnelle Antwort!

Zu 1:
Die Relativen Pfade haben bestens unter Windows XP und WIndows 7 funktioniert. Warum also nicht unter Windows 8?
Das Setup das ich ausführe erstellt zudem eine Verknüpfung zu einer Exe, die sich immer eine Ordnerebene höher befindet.

Zu 2:
Ich habe den Zusammenbau der Pfade nach deinen Empfehlungen geändert. Leider funktioniert das ganze immer noch nicht.

Zu 3:
Habe die UAC auf Hoch eingestellt. Bestätigungs-Dialoge erscheinen:
- Vor dem Kopieren der Dateien
- Während des Kopierens (es werden auch Redisitrbutables installiert)
- Wenn die Verknüpfung erstellt werden soll erscheint KEIN Dialog! Heißt das, dass ich keine Admin-Rechte mehr besitze (obowhl ich in der Gruppe Administratoren bin!?). Kann ich Windows forcieren, diesen Dialog anzuzeigen bzw. das Skript mit Admin-Rechten auszuführen?

Zu 4:
Ich habe mir alle lokalen Variablen i neiner Message Box ausgeben lassen. Sie weißen auf die korrekten Pfade!

Zu 5:
Ja, das ist aus den 2 folgenden Gründen nicht möglich:
1. Die Verknüpfung soll optional erstellt werden (d.h es muss eine Checkbox angewählt werden)
2. Das Setup wird durch ein anderes Setup kopiert/installiert und befindet sich daher unter einem bestimmten Pfad. Die Exe, auf welche die Verknüpfung erstellt werden soll, befindet sich IMMER RELATIV zu diesen Setup und wird NICHT beim Ausführen dieses Setups mitinstalliert. Daher auch die relativen Pfade beim Erstellen der Verknüpfung. Hoffe das war deutlich erklärt smile.gif

VG,
Sand0r

Edited by Sandor1990, 21 February 2013 - 10:14.


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 21 February 2013 - 11:21

zu 1.: weil es glaube ich nie offizíell dokumentiert war, dass relative Pfade funktionieren. Evtl. hat Microsoft am darunter liegenden Windows API eine Änderung gemacht, so dass es jetzt nicht mehr funktioniert. Falls es daran liegt: du kannst ja im Skript die EXE suchen (du weißt ja, wo sie liegt) und entsprechend einen absoluten Pfad konstruieren.

zu 3.+5.: Am besten wäre es, die Checkbox vor dem Kopiervorgang anzuzeigen und das Skript dann "deferred in system context" auszuführen zwischen InstallInitialize und InstallFinalize. Dann hat es Admin-Rechte.
Alternativ gehe zu Media > Releases, wähle dein Release aus, geht zur Registerkarte "Setup.exe" und stelle Required Execution Level auf "Administrator". Dann sollte der UAC Dialog gleich ganz am Anfang kommen und für das gesamte Setup gelten.

Sandor1990

Sandor1990
  • Full Members
  • 33 posts

Posted 21 February 2013 - 15:32

Zu 1:
Das seltsame ist, dass eine funktionsfähige Verknüpfung angelegt wird, wenn ich das Setup mit dem Benutzer Administrator ausführe. Das heißt an und für sich funktioniert das. Lediglich wenn ich das Setup als Benutzer, der sich in der Gruppe Administratoren befindet ausführe klappt es nicht.
Zum Testen mit einem Benutzer der sich in der Gruppe Administatoren befindet habe ich eine MessageBox vor den Funktionsaufruf AddFolderIcon() implementiert. Die Messagebox wird auch angezeigt, die Verknüpfung jedoch nicht angelegt.

Zu 3.+5.:
Zunächst einmal habe ich mein Release auf das Execution Level "Aministrator" umgestellt. Danach gab es leider keine Veränderung.
Ich werde mal die Methode mit der Custom Action ausprobieren. Danke mal smile.gif

Edited by Sandor1990, 21 February 2013 - 15:51.


Sandor1990

Sandor1990
  • Full Members
  • 33 posts

Posted 22 February 2013 - 09:25

Wenn ich mein Skript in eine Custom Action verpacke und zwischen InstallInitialize und InstallFinalize "deferred in system context" ausführe ist die SystemVariable "SETUPEXEDIR" noch nicht initialisiert.
Gibt es eine andere Variable, die ich verwenden kann?

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 26 February 2013 - 11:06

Variablen, die du in defrred Actions verwenden willst, musst du über den Umweg mit CustomActionData übergeben. Genaueres steht in der Doku. Sieht auf den ersten Blick etwas verwirrend aus, ist aber eigentlich kein Hexenwerk.