【问题标题】:Issue in MSI Launch Condition for detecting currently installed Excel version用于检测当前安装的 Excel 版本的 MSI 启动条件中的问题
【发布时间】:2017-03-08 15:38:02
【问题描述】:

我有一个用于安装 Excel 插件的 MSI。

到目前为止,此 MSI 已在多台机器上正常运行(运行 Windows 7、Windows Vista 或 Windows XP 的 64 位和 32 位机器),但最近一个用户的启动条件错误地失败了。

MSI 是在 32 位 Windows XP 机器上使用 Visual Studio 2010 安装程序项目准备的。

用户正在尝试将其安装在装有 Excel 2007 SP2(32 位)的 Windows 7 64 位机器上。

启动条件是确定当前安装的Excel版本。 为此:

  1. 我有一个带有以下参数的注册表搜索操作

    Property: EXCEL
    RegKeY: Software\Classes\Excel.Application\CurVer
    Root: vsdrrHKLM
    Value: 
    
  2. 并且启动条件为EXCEL = "Excel.Application.12" OR EXCEL = "Excel.Application.14"

在用户的机器上我已经确认:

  1. “HKLM\Software\Classes\Excel.Application\CurVer”的注册表值为“Excel.Application.12”
  2. msi 日志表明该值已正确读取

日志看起来像:

Action 15:42:58: ProgressForm. Dialog created
Action ended 15:42:58: ProgressForm. Return value 1.
MSI (c) (AC:28) [15:42:58:401]: Doing action: ExecuteAction
Action 15:42:58: ExecuteAction. 
Action start 15:42:58: ExecuteAction.
MSI (c) (AC:28) [15:42:58:410]: PROPERTY CHANGE: Adding SECONDSEQUENCE property. Its value is '1'.
MSI (c) (AC:28) [15:42:58:413]: Grabbed execution mutex.
MSI (c) (AC:28) [15:42:58:416]: Incrementing counter to disable shutdown. Counter after increment: 0
MSI (c) (AC:28) [15:42:58:419]: Switching to server: TARGETDIR="C:\Program Files (x86)\MySoftware\" _F6F7C451BA1841F0B59F5BF6C3620B2B="C:\Program Files (x86)\MySoftware\Data\" _B87F203625174B9894BB9AAD7BBA6EAB="C:\Program Files (x86)\MySoftware\Bin\" _6448E393C853494F8BBDC9D2FA0DA440="C:\ProgramData\Microsoft\Windows\Start Menu\Programs\MyCompany\" _BA6D696DE1324CDF936304F630FC10AD="C:\ProgramData\Microsoft\Windows\Start Menu\Programs\MyCompany\MySoftware\" _77B6D7C007D440959AF59826EEB28541="C:\Program Files (x86)\MySoftware\Data\LOGS\" _4AE2CF68991D4AADBC1984A3B6A685D2="C:\Program Files (x86)\MySoftware\Data\DB\" _0E7ED596C9F747DB961B97EBE7D8CA47="C:\Program Files (x86)\MySoftware\Doc\" EXCEL2007="C:\Program Files (x86)\Microsoft Office\Office12\" EXCEL="Excel.Application.12" VSDNETURLMSG="This setup requires the .NET Framework version 2.0.  Please install the .NET Framework and run this setup again.  The .NET Fram
MSI (s) (74:78) [15:42:58:430]: Running installation inside multi-package transaction H:\MySoftware\MySoftware.msi
MSI (s) (74:78) [15:42:58:433]: Grabbed execution mutex.
MSI (s) (74:F8) [15:42:58:439]: Resetting cached policy values
MSI (s) (74:F8) [15:42:58:442]: Machine policy value 'Debug' is 0
MSI (s) (74:F8) [15:42:58:444]: ******* RunEngine:
           ******* Product: H:\MySoftware\MySoftware.msi
           ******* Action: INSTALL
           ******* CommandLine: **********
//A lot of other stuff

MSI (s) (74:F8) [15:43:10:824]: Doing action: AppSearch
Action 15:43:10: AppSearch. Searching for installed applications
Action start 15:43:10: AppSearch.
MSI (s) (74:F8) [15:43:10:838]: Skipping AppSearch action: already done on client side
Action ended 15:43:10: AppSearch. Return value 0.
MSI (s) (74:F8) [15:43:10:844]: Doing action: FindRelatedProducts
Action 15:43:10: FindRelatedProducts. Searching for related applications
Action start 15:43:10: FindRelatedProducts.
MSI (s) (74:F8) [15:43:10:855]: Skipping FindRelatedProducts action: already done on client side
Action ended 15:43:10: FindRelatedProducts. Return value 0.
MSI (s) (74:F8) [15:43:10:861]: Skipping action: ERRCA_CANCELNEWERVERSION (condition is false)
MSI (s) (74:F8) [15:43:10:866]: Doing action: VSDCA_VsdLaunchConditions
Action 15:43:10: VSDCA_VsdLaunchConditions. 
Action start 15:43:10: VSDCA_VsdLaunchConditions.
MSI (s) (74:F8) [15:43:10:890]: Creating MSIHANDLE (27) of type 790542 for thread 4344
MSI (s) (74:E0) [15:43:10:893]: Invoking remote custom action. DLL: C:\Windows\Installer\MSI9C72.tmp, Entrypoint: VsdLaunchConditions
MSI (s) (74!34) [15:43:11:441]: Creating MSIHANDLE (28) of type 790531 for thread 6708
INFO   : [10/25/2012 15:43:11:445] [VsdLaunchConditions                     ]: Custom Action is starting...
INFO   : [10/25/2012 15:43:11:451] [VsdLaunchConditions                     ]: CoInitializeEx - COM initialization Apartment Threaded...
INFO   : [10/25/2012 15:43:11:456] [VsdLaunchConditions                     ]: Enumerating table using SQL statement: 'SELECT * FROM `_VsdLaunchCondition`'
INFO   : [10/25/2012 15:43:11:460] [VsdLaunchConditions                     ]: Calling MsiGetActiveDatabase...
MSI (s) (74!34) [15:43:11:464]: Creating MSIHANDLE (29) of type 790541 for thread 6708
INFO   : [10/25/2012 15:43:11:467] [VsdLaunchConditions                     ]: MsiDatabaseOpenViewW - Prepare Database to view table...
MSI (s) (74!34) [15:43:11:471]: Creating MSIHANDLE (30) of type 790540 for thread 6708
INFO   : [10/25/2012 15:43:11:474] [VsdLaunchConditions                     ]: TMsiViewExecute - Open Database view on table...
MSI (s) (74!34) [15:43:11:478]: Creating MSIHANDLE (31) of type 790531 for thread 6708
INFO   : [10/25/2012 15:43:11:482] [VsdLaunchConditions                     ]: Checking a launch condition...
INFO   : [10/25/2012 15:43:11:485] [VsdLaunchConditions                     ]: Getting the condition to evaluate...
INFO   : [10/25/2012 15:43:11:489] [VsdLaunchConditions                     ]: MsiRecordGetStringW - Fetching value...
INFO   : [10/25/2012 15:43:11:492] [VsdLaunchConditions                     ]: MsiRecordGetStringW - Getting value from column '1'...
INFO   : [10/25/2012 15:43:11:497] [VsdLaunchConditions                     ]: Evaluating condition 'VSDFXAvailable'...
INFO   : [10/25/2012 15:43:11:500] [VsdLaunchConditions                     ]: RESULT:  Condition is true. Nothing more to do.
MSI (s) (74!34) [15:43:11:504]: Closing MSIHANDLE (31) of type 790531 for thread 6708
MSI (s) (74!34) [15:43:11:508]: Closing MSIHANDLE (30) of type 790540 for thread 6708
INFO   : [10/25/2012 15:43:11:512] [VsdLaunchConditions                     ]: Custom Action succeeded.
INFO   : [10/25/2012 15:43:11:518] [VsdLaunchConditions                     ]: Custom Action completed with return code: '0'
MSI (s) (74!34) [15:43:11:522]: Closing MSIHANDLE (29) of type 790541 for thread 6708
MSI (s) (74!34) [15:43:11:525]: Closing MSIHANDLE (28) of type 790531 for thread 6708
MSI (s) (74:E0) [15:43:11:530]: Closing MSIHANDLE (27) of type 790542 for thread 4344
Action ended 15:43:11: VSDCA_VsdLaunchConditions. Return value 1.
MSI (s) (74:F8) [15:43:11:538]: Doing action: LaunchConditions
Action 15:43:11: LaunchConditions. Evaluating launch conditions
//Few more lines

Action ended 15:43:13: LaunchConditions. Return value 3.
Action ended 15:43:13: INSTALL. Return value 3.
//some other traces

MSI (c) (AC:04) [15:43:16:896]: Custom Action Manager thread ending.
Property(C): UpgradeCode = {9FC0F443-EECC-4C3B-939E-D033349C22BA}
Property(C): TARGETDIR = C:\Program Files (x86)\MySoftware
Property(C): _F6F7C451BA1841F0B59F5BF6C3620B2B = C:\Program Files (x86)\MySoftware\Data\
Property(C): _B87F203625174B9894BB9AAD7BBA6EAB = C:\Program Files (x86)\MySoftware\Bin\
Property(C): ProgramMenuFolder = C:\ProgramData\Microsoft\Windows\Start Menu\Programs\
Property(C): _6448E393C853494F8BBDC9D2FA0DA440 = C:\ProgramData\Microsoft\Windows\Start Menu\Programs\MySoftware\
Property(C): _BA6D696DE1324CDF936304F630FC10AD = C:\ProgramData\Microsoft\Windows\Start Menu\Programs\MySoftware\
Property(C): WindowsFolder = C:\Windows\
Property(C): SystemFolder = C:\Windows\SysWOW64\
Property(C): SourceDir = H:\MySoftware\
Property(C): _77B6D7C007D440959AF59826EEB28541 = C:\Program Files (x86)\MySoftware\Data\LOGS\
Property(C): _4AE2CF68991D4AADBC1984A3B6A685D2 = C:\Program Files (x86)\MySoftware\Data\DB\
Property(C): _0E7ED596C9F747DB961B97EBE7D8CA47 = C:\Program Files (x86)\MySoftware\Doc\
Property(C): VSDFXAvailable = TRUE
Property(C): VSDFrameworkVersion = v2.0
Property(C): VSDAllowLaterFrameworkVersions = False
Property(C): EXCEL2007 = C:\Program Files (x86)\Microsoft Office\Office12\
Property(C): EXCEL = Excel.Application.12
Property(C): ProductName = MySoftware
Property(C): ProductCode = {04835711-7FDB-4B00-9A39-6C6776D9900A}
Property(C): ProductVersion = 1.31.2012
Property(C): Manufacturer = MyCompany
Property(C): ARPHELPLINK = http://www.MyCompany.com/
Property(C): ARPCONTACT = MyCompany
Property(C): ARPURLINFOABOUT = http://www.MyCompany.com/
Property(C): ProductLanguage = 1033
Property(C): SecureCustomProperties = PREVIOUSVERSIONSINSTALLED;NEWERPRODUCTFOUND
Property(C): RedirectedDllSupport = 2
Property(C): VersionNT = 601
Property(C): VSDNETURLMSG = This setup requires the .NET Framework version 2.0.  Please install the .NET Framework and run this setup again.  The .NET Framework can be obtained from the web.  Would you like to do this now?
Property(C): VSDIISMSG = This setup requires Internet Information Server 5.1 or higher and Windows XP or higher.  This setup cannot be installed on Windows 2000.  Please install Internet Information Server or a newer operating system and run this setup again.
Property(C): VSDUIANDADVERTISED = This advertised application will not be installed because it might be unsafe. Contact your administrator to change the installation user interface option of the package to basic.
Property(C): VSDNETMSG = This setup requires the .NET Framework version 2.0.  Please install the .NET Framework and run this setup again.
Property(C): VSDINVALIDURLMSG = The specified path '[2]' is unavailable. The Internet Information Server might not be running or the path exists and is redirected to another machine. Please check the status of this virtual directory in the Internet Services Manager.
Property(C): VSDVERSIONMSG = Unable to install because a newer version of this product is already installed.
Property(C): FolderForm_AllUsers = ALL
Property(C): FolderForm_AllUsersVisible = 1
Property(C): DefaultUIFont = VsdDefaultUIFont.524F4245_5254_5341_4C45_534153783400
Property(C): MaintenanceForm_Action = Repair
Property(C): AdminMaintenanceForm_Action = Repair
Property(C): ErrorDialog = ErrorDialog
Property(C): SFF_UpFldrBtn = UpFldrBtn
Property(C): SFF_NewFldrBtn = NewFldrBtn
Property(C): WelcomeForm_NextArgs = FolderForm
Property(C): FolderForm_PrevArgs = WelcomeForm
Property(C): FolderForm_NextArgs = ConfirmInstallForm
Property(C): ConfirmInstallForm_PrevArgs = FolderForm
Property(C): AdminWelcomeForm_NextArgs = AdminFolderForm
Property(C): AdminFolderForm_PrevArgs = AdminWelcomeForm
Property(C): AdminFolderForm_NextArgs = AdminConfirmInstallForm
Property(C): AdminConfirmInstallForm_PrevArgs = AdminFolderForm
Property(C): WindowsFolder_x86_VC.F1DD796A_B984_3DCA_A68D_6B352BDC86F3 = C:\Windows\
Property(C): SystemFolder_x86_VC.F1DD796A_B984_3DCA_A68D_6B352BDC86F3 = C:\Windows\SysWOW64\
Property(C): ALLUSERS = 2
Property(C): DirectoryTable100_x86.F1DD796A_B984_3DCA_A68D_6B352BDC86F3 = DirectoryTable
Property(C): MsiLogFileLocation = H:\MySoftware\.\msilog.txt
Property(C): PackageCode = {ABF9C77A-61D2-49AF-BD7F-F55CE2567525}
Property(C): ProductState = -1
Property(C): PackagecodeChanging = 1
Property(C): RestrictedUserControl = 1
Property(C): CURRENTDIRECTORY = H:\MySoftware
Property(C): CLIENTUILEVEL = 0
Property(C): CLIENTPROCESSID = 7340
Property(C): VersionDatabase = 200
Property(C): VersionMsi = 5.00
Property(C): VersionNT64 = 601
Property(C): WindowsBuild = 7601
Property(C): ServicePackLevel = 1
Property(C): ServicePackLevelMinor = 0
Property(C): MsiNTProductType = 1
Property(C): WindowsVolume = C:\
Property(C): System64Folder = C:\Windows\system32\
Property(C): RemoteAdminTS = 1
Property(C): TempFolder = C:\Users\U060597\AppData\Local\Temp\
Property(C): ProgramFilesFolder = C:\Program Files (x86)\
Property(C): CommonFilesFolder = C:\Program Files (x86)\Common Files\
Property(C): ProgramFiles64Folder = C:\Program Files\
Property(C): CommonFiles64Folder = C:\Program Files\Common Files\
Property(C): AppDataFolder = C:\Users\U060597\AppData\Roaming\
Property(C): FavoritesFolder = C:\Users\U060597\Favorites\
Property(C): NetHoodFolder = C:\Users\U060597\AppData\Roaming\Microsoft\Windows\Network Shortcuts\
Property(C): PersonalFolder = C:\
Property(C): PrintHoodFolder = C:\Users\U060597\AppData\Roaming\Microsoft\Windows\Printer Shortcuts\
Property(C): RecentFolder = C:\Users\U060597\AppData\Roaming\Microsoft\Windows\Recent\
Property(C): SendToFolder = C:\Users\U060597\AppData\Roaming\Microsoft\Windows\SendTo\
Property(C): TemplateFolder = C:\ProgramData\Microsoft\Windows\Templates\
Property(C): CommonAppDataFolder = C:\ProgramData\
Property(C): LocalAppDataFolder = C:\Users\U060597\AppData\Local\
Property(C): MyPicturesFolder = C:\My Pictures\
Property(C): AdminToolsFolder = C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools\
Property(C): StartupFolder = C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup\
Property(C): StartMenuFolder = C:\ProgramData\Microsoft\Windows\Start Menu\
Property(C): DesktopFolder = C:\Users\Public\Desktop\
Property(C): FontsFolder = C:\Windows\Fonts\
Property(C): GPTSupport = 1
Property(C): OLEAdvtSupport = 1
Property(C): ShellAdvtSupport = 1
Property(C): MsiAMD64 = 6
Property(C): Msix64 = 6
Property(C): Intel = 6
Property(C): PhysicalMemory = 12279
Property(C): VirtualMemory = 18474
Property(C): LogonUser = u060597
Property(C): UserSID = S-1-5-21-1715567821-1004336348-725345543-486654
Property(C): UserLanguageID = 2057
Property(C): ComputerName = WR8DW1T3
Property(C): SystemLanguageID = 2057
Property(C): ScreenX = 1920
Property(C): ScreenY = 1080
Property(C): CaptionHeight = 22
Property(C): BorderTop = 1
Property(C): BorderSide = 1
Property(C): TextHeight = 16
Property(C): TextInternalLeading = 3
Property(C): ColorBits = 32
Property(C): TTCSupport = 1
Property(C): Time = 15:43:17
Property(C): Date = 25/10/2012
Property(C): MsiNetAssemblySupport = 4.0.30319.1
Property(C): MsiWin32AssemblySupport = 6.1.7601.17514
Property(C): AdminUser = 1
Property(C): MsiRunningElevated = 1
Property(C): Privileged = 1
Property(C): USERNAME = user
Property(C): COMPANYNAME = UserCompany
Property(C): DATABASE = C:\Users\U060597\AppData\Local\Temp\5c64805.msi
Property(C): OriginalDatabase = H:\MySoftware\MySoftware.msi
Property(C): SOURCEDIR = H:\MySoftware\
Property(C): VersionHandler = 5.00
Property(C): UILevel = 5
Property(C): ACTION = INSTALL
Property(C): EXECUTEACTION = INSTALL
Property(C): VSDFxConfigFile = C:\Users\U060597\AppData\Local\Temp\CFG4C2A.tmp
Property(C): ROOTDRIVE = C:\
Property(C): CostingComplete = 1
Property(C): OutOfDiskSpace = 0
Property(C): OutOfNoRbDiskSpace = 0
Property(C): PrimaryVolumeSpaceAvailable = 0
Property(C): PrimaryVolumeSpaceRequired = 0
Property(C): PrimaryVolumeSpaceRemaining = 0
Property(C): INSTALLLEVEL = 1
=== Logging stopped: 25/10/2012  15:43:17 ===

从上面的日志可以看出,属性“EXCEL”设置正确,但启动条件仍然失败。 MSI 也以提升的权限运行。

有人知道这里可能出了什么问题吗? 我是部署领域的新手,非常感谢这方面的任何帮助

【问题讨论】:

    标签: windows-installer


    【解决方案1】:

    如果没有看到整个日志,很难说 100%,但我似乎发生了什么事:

    1) 您开始安装并通过对话框。

    2) 安装程序开始安装并抛出有关 excel 的错误消息。

    3) 安装程序退出。

    为安装 UI 序列和安装执行序列安排了 LaunchConditions 标准操作。当 UI 运行时,会触发 AppSearch 操作并设置属性。

    但是,EXCEL 属性未列在 SecureCustomProperties 属性中。因此,当安装程序切换执行序列时,该值变为空。 Windows Installer 不会在执行序列中再次运行 AppSearch 操作,因此它保持为空。

    但是,LaunchConditions 标准操作已运行,并且表达式的计算结果为 false 中止安装。

    这个理论可以通过阅读整个日志文件并注意动作何时触发来证明。测试该理论的另一种方法是从提升的命令提示符运行 MSI。在这种情况下,SecureCustomProperties 不起作用,InstallUI 中设置的属性将延续到 InstallExecute 序列。

    最后,应该指出的是,Visual Studio 部署项目确实很糟糕。以至于微软从 Visual Studio 2012 中删除了它们。我将停止在这个工具上投入更多的时间,而改用 Windows Installer XML 或 InstallShield Limited Edition。

    【讨论】:

    • 感谢您的回复。您对避免 VS 的建议很好。我们已经在我们的路线图中迁移到 WIX,但现在我们对 VS 感到震惊。关于您的答案,msi 是否有可能以您怀疑的方式在特定机器上失败,同时在其他机器上正确工作?另外,与以提升的权限运行 MSI 相比,提升的 cmd 提示有什么额外的效果(如日志所示,MSI 正在以提升的权限运行)?我在为执行序列触发 LaunchConditions 之前添加了日志。我注意到 Appsearch 被跳过了!(不明白为什么)
    • 另外,是否有任何您知道的系统设置(可能是一些权限更改..)与 MSI 从提升的 cmnd prmpt 运行时具有相同的效果(从而避免需要首先打开一个 cmnd prmpt)?
    • 在 Internet 上阅读了有关 MSI 的更多信息后,我想我现在明白 AppSearch 在“服务器”端被跳过了,因为客户端已经向服务器提供了值(如“切换到服务器的日志)。但是为服务器列出的属性不包含“EXCEL”属性...现在我明白这是启动条件失败的原因,但为什么它没有拾取传递的属性?
    • 因为该属性未在 SecureCustomProperties 属性中列出。
    • 感谢您的解释。在它之后,我找到了解决此问题的 EnableUserControl 策略,尽管我知道建议使用 SecureCustomProperties
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-08
    • 2010-10-25
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 2022-01-04
    • 2014-12-18
    相关资源
    最近更新 更多