2009-05-18 4 views
0

Umwelt: Installshield 2009 Premier, Vista (Home/Premium, Ultimate)Installshield 2009 Premier Custom Action Problem in Vista Home/Premium/Ultimate

Ich habe eine benutzerdefinierte Aktion in Installshield 2009, die bei der Installation feuern würde . Wenn setup.exe ausgeführt wird, ist es in Ordnung, aber wenn MyApplication.msi in Vista ausgeführt wird (bitte beachten Sie, dass die benutzerdefinierten Aktionen in anderen Betriebssystemen problemlos funktionieren), wird die Ausnahme angezeigt, die die benutzerdefinierte Aktion ausführt. Benutzerdefinierte Aktion führt nur eine EXE mit Befehlszeilenargumenten aus.

Diese exe führt in diesem OS nur gut einzeln. Aber wenn MyApplication.msi es ausführen möchte, zeigt es eine Ausnahme an.

Ich denke: MyApplication.msi kann dieser benutzerdefinierten Aktion (.exe-Datei) nicht die richtige Berechtigung (administrative) geben, um damit zu arbeiten. Aber setup.exe kann.

Wie kann es gelöst werden ...?


Vom Assistenten Custom Action für meine benutzerdefinierte Aktion, für die "In-Script Execution" Wert wählte ich "verzögerte Ausführung Im Systemkontext"

Antwort

1

Sie nicht Staat taten, aber es klingt wie Ihr Setup .exe verfügt über ein Manifest, für das Administratorberechtigungen erforderlich sind (wenn Sie beim Starten von setup.exe eine UAC-Eingabeaufforderung erhalten, ist dies der Fall). Es klingt auch wahrscheinlich, dass die exe, die Sie aus Ihrer benutzerdefinierten Aktion ausführen möchten, eine ähnliche Administratorberechtigung hat. Eine benutzerdefinierte Exe-Aktion in MSI verwendet CreateProcess, die nicht erhöht werden kann.

Wenn Ihre Aktion in der Benutzeroberflächensequenz ausgeführt wird, müssen Sie ShellExecute oder ShellExecuteEx irgendwie verwenden. Dies kann mit einer benutzerdefinierten InstallScript-Aktion mit LaunchApplication mit dem Flag LAAW_OPTION_USE_SHELLEXECUTE oder mit C++, das ShellExecuteEx direkt aufruft, erfolgen.

Wenn Ihre Aktion in der Execute-Sequenz ausgeführt wird, sollten Sie sie als "Deferred in System Context" markieren, damit sie von einem erhöhten Kontext gestartet wird. Dies wird im Allgemeinen bevorzugt (zumindest in Bezug auf die Benutzererfahrung), da es die zusätzliche UAC-Eingabeaufforderung vermeidet, die von der anderen Methode angezeigt wird. Jede zurückgestellte Aktion hat jedoch Einschränkungen (z. B. minimaler Zugriff auf Eigenschaften), mit denen Sie sich vertraut machen müssen.

+0

Hallo Michael, Danke 4 you info. Ja, ich bin neu bei InstallShield. Meine benutzerdefinierte Aktion wird in der Ausführungssequenz ausgeführt. Seine Eigenschaften waren: Return Verarbeitung: Synchrone (Exit-Code überprüfen) In Skriptausführung: Sofortige Ausführung Scheduling Execution: Immer UI Sequenz Install ausführen: Sequenz ausführen installieren: installieren Execute Bedingung: NICHT installiert UND NICHT PATCH Nun, wenn die Eigenschaft "In Skriptausführung" auf "verzögerte Ausführung im Systemkontext" während der Installation festgelegt ist, zeigt es Ausnahme auch in XP und Vista. Was nun zu tun? – Samir

+0

Ah, das ist eine weitere Einschränkung der zurückgestellten Aktionen: Sie müssen zwischen InstallInitialize und InstallFinalize geplant werden. Wenn Sie es tatsächlich als erste Aktion benötigen, müssen Sie wahrscheinlich auf die UI-Sequenzmethode zurückgreifen (die in der Ausführungssequenz doppelt schlecht ist, da die Ausführungssequenz die Benutzeroberfläche nicht anzeigen soll). –

+0

Vielen Dank Michael. Es klappt. Ich habe auch Manifest-Datei für diese benutzerdefinierte Aktion hinzugefügt, obwohl ohne es in Vista funktioniert. – Samir