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

msiexec /fvemus problem


1 reply to this topic

bernard

bernard
  • Full Members
  • 127 posts

Posted 19 September 2008 - 09:44

habe InstallShield 2008 Prof.

Aus einem InstallScript Projekt führe ich zig Basic MSI Projekte mit
= setup.rul =
// #define REBOOT_SETUP_UNINST_KEY "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall"
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
szSub_Key = REBOOT_SETUP_UNINST_KEY;
szSub_Key = szSub_Key + "\\" + DLTSETUP_UninstGUID;
// DLTSETUP_UninstGUID = {guid}
szPathMergeModules = SRCDIR;
ChangeDirectory(szPathMergeModules);
szValueDes = szPathMergeModules ^ DLTSETUP_MERGEMODULES_MSI; // "Delta Setup.msi"
if ( RegDBKeyExist(szSub_Key) = 1 ) then
szValueDes = " /fvemus " + "\"" + szValueDes + "\"";
else
szValueDes = " /i " + "\"" + szValueDes + "\"";
endif;
// szTEMP_Merge = %TEMP%-Verzeichnis
szValueDes = szValueDes + " ALLUSERS=2";
szValueDes = szValueDes + " /L*VX " + szTEMP_Merge ^ DLTSETUP_MERGEMODULES_LOG + " /qn"; // Delta_Setup.log
LaunchAppAndWait("msiexec",szValueDes,LAAW_OPTION_WAIT);
...
aus.

Danach nutze ich die Funktionen von DLLs.

Mein "Delta Setup.msi" ist Basic MSI Projekt
und hat 3 DLLs, welche ins [TempFolder] (%TEMP%-Verzeichnis) ausgepackt werden
und 2 Merge Modulen :
- Microsoft_VC80_MFC_x86.msm
- Microsoft_VC80_CRT_x86.msm

Problem:
WinXP (SP2) Rechner
1. Erster test5-User (Administrator) installiert alles OK!

2. Zweiter jbadmin-User ( Administrator) startet.
Aber wird es ins C:\DOKUME~1\test5\LOKALE~1\Temp (%TEMP%-Verzeichnis des erstes Users) ausgepackt
und nicht ins C:\DOKUME~1\jbadmin\LOKALE~1\Temp (%TEMP%-Verzeichnis des zweites Users) !

Protokoll: (Aus dem %TEMP%\Delta_Setup.log)
...
Action ended 09:55:41: IsolateComponents. Return value 0.
MSI (s) (B8:DC) [09:55:41:218]: PROPERTY CHANGE: Adding OutOfDiskSpace property. Its value is '0'.
MSI (s) (B8:DC) [09:55:41:218]: PROPERTY CHANGE: Adding OutOfNoRbDiskSpace property. Its value is '0'.
MSI (s) (B8:DC) [09:55:41:218]: PROPERTY CHANGE: Adding PrimaryVolumeSpaceAvailable property. Its value is '0'.
MSI (s) (B8:DC) [09:55:41:218]: PROPERTY CHANGE: Adding PrimaryVolumeSpaceRequired property. Its value is '0'.
MSI (s) (B8:DC) [09:55:41:218]: PROPERTY CHANGE: Adding PrimaryVolumeSpaceRemaining property. Its value is '0'.
MSI (s) (B8:DC) [09:55:41:218]: PROPERTY CHANGE: Modifying TempFolder property. Its current value is 'C:\DOKUME~1\jbadmin\LOKALE~1\Temp\'. Its new value: 'C:\DOKUME~1\test5\LOKALE~1\Temp'.
MSI (s) (B8:DC) [09:55:41:234]: Note: 1: 2205 2: 3: Condition
MSI (s) (B8:DC) [09:55:41:234]: Using cached product context: machine assigned for product: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
MSI (s) (B8:DC) [09:55:41:234]: Using cached product context: machine assigned for product: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
MSI (s) (B8:DC) [09:55:41:234]: Machine policy value 'EnforceUpgradeComponentRules' is 0
MSI (s) (B8:DC) [09:55:41:234]: Using cached product context: machine assigned for product: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
MSI (s) (B8:DC) [09:55:41:234]: PROPERTY CHANGE: Adding TARGETDIR property. Its value is 'C:\'.
MSI (s) (B8:DC) [09:55:41:234]: PROPERTY CHANGE: Adding WinSxsDirectory.68B7C6D9_1DF2_54C1_FF1F_C8B3B9A1E18E property. Its value is 'C:\WINDOWS\winsxs\'.
MSI (s) (B8:DC) [09:55:41:234]: PROPERTY CHANGE: Adding payload.8.0.50727.762.68B7C6D9_1DF2_54C1_FF1F_C8B3B9A1E18E property. Its value is 'C:\WINDOWS\winsxs\x86_policy.8.0.Microsoft.VC80.MFC_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_7ffcb70c\'.
...
MSI (s) (B8:DC) [09:55:41:234]: PROPERTY CHANGE: Adding USERPROFILE property. Its value is 'C:\'.
MSI (s) (B8:DC) [09:55:41:234]: PROPERTY CHANGE: Modifying TempFolder property. Its current value is 'C:\DOKUME~1\test5\LOKALE~1\Temp'. Its new value: 'C:\DOKUME~1\test5\LOKALE~1\Temp\'.
...
Property(S): ReinstallModeText = omus
Property(S): REINSTALLMODE = vemus
Property(S): REINSTALL = ALL
MSI (s) (B8:DC) [09:55:48:125]: Product: Delta Setup -- Configuration completed successfully.

Habe probiert um für jede Komponente eine Schlüsseldatei zudefinieren.

Wie soll der zweiter User richtig msiexec starten?

Danke in Voraus

bernard


bernard

bernard
  • Full Members
  • 127 posts

Posted 16 October 2008 - 13:15

Aus einem "Delta Setup.msi" (Basic MSI Projekt) habe zwei Basic MSI Projekte erstellt:
- erste hat 2 Merge Modulen :
-- Microsoft_VC80_MFC_x86.msm
-- Microsoft_VC80_CRT_x86.msm
- zweite hat 3 DLLs, welche ins [TempFolder] (%TEMP%-Verzeichnis) ausgepackt werden

Aus einem InstallScript Projekt führe ich
// #define REBOOT_SETUP_UNINST_KEY "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall"
// szTEMP_Merge = %TEMP%-Verzeichnis
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE );
szSub_Key = REBOOT_SETUP_UNINST_KEY;
szSub_Key = szSub_Key + "\\" + DLTSETUP_UninstGUID;

szPathMergeModules = SRCDIR;
ChangeDirectory(szPathMergeModules);
// erste Basic MSI Project
szValueDes = szPathMergeModules ^ DLTSETUP_MERGEMODULES_MSI; // "Delta Setup.msi"

if ( RegDBKeyExist(szSub_Key) = 1 ) then // existiert
szValueDes = " /f " + "\"" + szValueDes + "\"";
else
szValueDes = " /i " + "\"" + szValueDes + "\"";
endif;
szValueDes = szValueDes + " ALLUSERS=1";
szValueDes = szValueDes + " ARPSYSTEMCOMPONENT=1"; // in Software ist UnVisable
szValueDes = szValueDes + " /L*VX " + szTEMP_Merge ^ DLTSETUP_MERGEMODULES_LOG + " /qn";
if ( LaunchAppAndWait("msiexec",szValueDes,LAAW_OPTION_WAIT) < 0 ) then
...
und
RegDBSetDefaultRoot( HKEY_USER_SELECTABLE_AUTO );
szSub_Key = REBOOT_SETUP_UNINST_KEY;
szSub_Key = szSub_Key + "\\" + Delta_Setup_User_UninstGUID;

szPathMergeModules = SRCDIR;
ChangeDirectory(szPathMergeModules);
// zweite Basic MSI Project
szValueDes = szPathMergeModules ^ Delta_Setup_User_MSI;
szValueDes = " /i " + "\"" + szValueDes + "\"";
szValueDes = szValueDes + " ARPSYSTEMCOMPONENT=1";
szValueDes = szValueDes + " /L*VX " + szTEMP_Merge ^ Delta_Setup_User_LOG + " /qn";
if ( LaunchAppAndWait("msiexec",szValueDes,LAAW_OPTION_WAIT) < 0 ) then
...
aus.

Jetzt funktioniert richtig.