mayho33
Goto Top

MSI per-User-Installation

Hallo Forum-User,

Ich entwickle Basic-MSIs mit Flexera-Installshield, wenn Daten kein Setup haben, z.B. speziell Setting für SAP usw. Settings die im User-Bereich installiert werden müssen (%APPDATA%, %LOCALAPPDATA%, HKCU) habe ich bisher immer via Active-Setup aufgebacht.

Eine Änderung unserer "Installations-Philosophie" (<= nicht meine Idee), sieht es nun vor, keine Neustarts des Systems mehr vorzunehmen, zu erzwingen bzw. dazu aufzufordern. Somit ist Active-Setup nur noch bedingt einsetzbar, weil User-Settings schon während des Setups vorgenommen werden müssen. Das ist aber bei einer Per-Machine-Installations tlw. nicht möglich so wie ich das sehe.

Mein Problem:
Egal in welcher Sequenz, ich kann nicht in HKCU schreiben, auch nicht über eine CA, weil Windows-Installer eine MSI zuerst immer im MACHINE-Kontext ausführen will, sprich:
  • Anfordern administrativer Rechte, bzw. UAC springt an
  • Registration der MSI unter HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
  • Ablegen der TMP-MSI unter C:\Windows\Installer
  • usw.

Meine Idee war also eine reine "per-User-MSI" zu erstellen die dann via SCCM im "User-Context" ausgeführt werden kann, auch wenn der User keine administrativen Rechte hat. In der Registry sollte die MSI bzw. das Setup dann:

  • im HKCU registriert sein
  • die Tmp-MSI irgendwo unter %LOCALAPPDATA% liegen
  • keine administrativen Rechte anfordern

BSP:
hkcu

in der Entwicklungsumgebung von Installshield und auch Adminstudio gibt es dafür das Flag "Show Per-User Option" = YES. Gleichzeitig muss das Flag "Require Administrative Privileges" = NO gesetzt werden
is_a

Das führt aber nicht zum Erforg. Die MSI will sich immer noch unter HKLM registrieren.

Verschiedene Versuche mit den Properties im Property Manager dito. Kein Erfolg:
  • ALLSUERS=2 + MSIINSTALLPERUSER=1
  • ALLUSERS=NULL + MSIINSTALLPERUSER=1
  • ALLUSERS=NULL + MSIINSTALLPERUSER=1 + ApplicationUsers = OnlyCurrentUser
  • msiexec /i "meine.msi" ALLUSER=2 MSIINSTALLPERUSER=1 /qn

Siehe dazu auch: community.flexera.com/t5/InstallShield-Forum/ALLUSERS-property-and-InstallOption/m-p/68580

Fragen:
Hat irgendjemand eine Idee wie ich eine simple Basic-MSI dazu bekomme,
A) nicht nach administrativen Rechten zu schreien
B) sich ausschließlich in HKCU und %APPDATA% bzw %LOCALAPPDTA% zu tummeln, wenn ich auch nur dort schreiben will

Ich hoffe ich habe mich halbwegs klar ausgedrückt!

Danke für die Unterstützung und beste Grüße!

Mayho

Content-ID: 6237065050

Url: https://administrator.de/contentid/6237065050

Ausgedruckt am: 23.11.2024 um 22:11 Uhr

emeriks
emeriks 06.03.2023 aktualisiert um 15:31:47 Uhr
Goto Top
Hi,
wenn es rein Per-User sein soll, dann darf ALLUSERS nicht 1 oder 2 sein sondern muss 0 oder leer sein.
Bearbeite mal mit z.B. Orca das MSI und schau, was da unter ALLUSERS als Wert eingetragen ist.

Ich habe hier nur nur ne ältere Express Version von InstallShield. Da verbirgt sich das im Block "General".

2023-03-06 15_25_32

E.

Edit:
Laut Hilfe:
If the value of the ALLUSERS property does not equal 2, the Windows Installer ignores the value of the MSIINSTALLPERUSER property.
mayho33
mayho33 06.03.2023 um 19:53:57 Uhr
Goto Top
Hi Emeriks,

Danke für deine Antwort. Ich habe nicht alle Versuche aufgelistet. ALLUSERS="" habe ich aber sicherlich auch versucht. Sowohl in der Command Line als auch im Property Manager.

MSI schreibt zu dem Property ALLUSERS folgendes (https://learn.microsoft.com/en-us/windows/win32/msi/allusers):

The value ALLUSERS=2 enables the system to reset the value of ALLUSERS, and the installation context, dependent upon the user's privileges and the version of Windows.


Ich interpretiere das so, dass je nach Privilegien des jeweiligen Users, die MSI in HKLM oder HKCU registriert wird und dass nur die Datn geschrieben werden die im Kontext des Users geschrieben werden können.
Das ist aber nicht der Fall. führt man msiexec ohne administrative Rechte aus kommt "Error 1925 You do not have sufficient privileges to complete"

Hier ein Beispiel das sich bei allen Variante wiederholt:
1925_a

Anderswo wird auch empfolen das Property ALLSUSER komplett aus dem Property Manager zu löschen. aber genauso gut könnte man sich einen Stein auf den Kopf hauen. Es funktioniert nur (bedingt), wenn man im UI-Kontext installiert, vorher die Per-User Option aktiviert hat und anschließend natürlich "Only for Me" klickt.
1925

Der Fehler liegt vermutlich irgendwo im Detail. Das MIS.log ist aber unauffällig. Alle Properties sind wie erwartet. Und das allertraurigste:
Hat man administrative Rechte, wird die MSI trotz "Only for Me"-Installation im HKLM registriert. Unbefriedigender gehts kaum...
reg


Vielleicht muss ich doch ein WIX-Setup erstellen oder ein Visual-Studio-C2R. Das wäre aber mehr als unlustig. Immerhin kostet Installshield knapp 1300 Euro im Jahr.
emeriks
Lösung emeriks 07.03.2023 um 09:35:09 Uhr
Goto Top
m.E. würde es reichen, wenn Du das MSI mit Orca editierst und ALLUSERS auf 0 oder {leer} setzt. Sowas habe ich auch schon öfters gemacht.
mayho33
Lösung mayho33 07.03.2023 um 23:10:52 Uhr
Goto Top
Alles versucht. Vielleicht ist es ein Fehler im Windows-Installer 5. Oder in der Release des Installshield.

Ich werde mir mal die 2013er Version installieren und das MSI nochmal basteln. Sind ja nur 1 HKCU Key und ein paar Files in AppData drinnen.
mayho33
mayho33 13.03.2023 um 19:29:40 Uhr
Goto Top
Hi zusammen,

Kleines Update ...oder Großes. Je nachdem!

Ich habe jetzt mit IS2013 das MSI nachgebaut.
  • Per-User-Option sowohl als auch aktiviert/deaktiviert
  • Need Adminrights = "NO"
  • Software Identification Tag = "NO"
  • INSTALLDIR = [TARGETDIR]
  • 1 HKCU RegKey
  • ein paar Files im APPDATA und LOCALAPPDATA

Getestete Flags:
  • ALLUSER=0
  • ALLUSER={NULL}
  • ALLUSER={0}
  • ALLUSER={}
  • ALLUSER=

Verhalten ist immer noch das gleiche. Die MSI will immer noch im HKLM schreiben (??)

Ich habe jetzt aber eine andere Lösung:
  • Files in Support-Dir abgelegt
  • Eine Set-Property-CA angelegt [SUPPORTDIR]
  • ein VBScript-CA im Deffered die via CustomActionData die SupportDir holt
  • aus der Registry die aktuelle LogedOn-Userprofile-Daten (Darunter auch die SID des eventuell angemeldeten Users.
  • und dann schreibe ich direkt in den HKU und AppData, wenn ein Benutzer angemeldet ist.
  • Zusätzlich alles für ein Active-Setup eingebaut. Jetzt wird nach einem Reboot halt doppelt gemoppelt.

Alles ziemlich aufwändig, aber es funktioniert, denn man gönnt sich ja sonst nichts, außer ein Tool das 1300 Euro kostet im Jahr. face-wink und nicht macht was man will face-big-smile

Einen großen Dank für deine Unterstützung @emeriks !! Vielleicht können wir ja mal per PN ein wenig fachsimpeln was MSI angeht.

Beste Grüße!

Mayho
mayho33
mayho33 19.01.2024 um 16:21:59 Uhr
Goto Top
Sodala! Hier nochmal ein Nachsatz:

Habe die Lösung gefunden. Installshield aka einer seiner vielen Besitzer (jetzt gerade Revenera) hat hier offensichtlich einen kapitalen Fehler eingebaut. Dass der noch niemandem aufgefallen ist wundert mich. Oder aber ich war bisher einfach zu dämlich das richtig zu machen, was ich aber irgendwie ausschließen kann/will 😉🦄🫣

Also, der Support gibt an (Siehe Revenera) man soll im Property-Manager das Property ALLUSER=2 setzen und das Property MSIINSTALLPERUSER=1 setzen. und wie durch Zauberhand würden dann die Settings die bei der Installation automatisch in HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall landen, hier landen: HKEY_CURRENT_USER\Software\Microsoft\Installer\Products oder ähnlich. Auf jedem Fall aber HKEY_CURRENT_USER .

Tja Nein! Tatsächlich musste ich 6 Dinge machen damit keine Admin-Rechte mehr abgefragt werden und Benutzer ohne administrative Rechte die MSI installieren können:
  • Require Administrative Privileges unter General Information auf No setzen (eh klar!)
  • ALLUSER-Property löschen
  • Kein MSIINSTALLPERUSER
  • In den Components das "Shared"-Flag auf NO setzen
  • Log-File erstellen deaktivieren
  • Software Identification Tag auf No setzen (schade!)

Vielleicht hilft es dem einen oder anderen!

Grüße!