Wix安装程序:如何在同一安装包中为Win7和Win10创建开始菜单快捷方式?

时间:2015-12-04 06:32:30

标签: wix shortcuts

Win7中快捷方式的开始菜单使用分层结构,而Win10中的快捷方式使用平面结构。我正在寻找有关如何在WIX安装程序项目中编写代码的帮助,如果操作系统是Win7,则创建分层快捷方式结构,如果操作系统是Win10,则创建平面结构。

在WIX中,使用ID为“ProgramMenuFolder”的Directory元素定义开始菜单快捷方式(例如,参见this document)。我发现的所有文章都不会多次定义此元素。任何时候我尝试定义这个元素两次(例如在不同的片段,功能,组件内)然后我得到各种错误消息,包括蜡烛错误“”重复符号'目录:找到ProgramMenuFolder'。

我的问题是,是否可以使用相同的WIX构建的MSI安装程序创建分层的开始菜单快捷方式结构,如果在Win7上安装,但如果在Win10上安装,则为平面开始菜单快捷方式结构?如果是这样,您能否提供执行此操作所需的WIX代码的详细信息?

THANX!

伊恩

2 个答案:

答案 0 :(得分:0)

它与操作系统版本无关。

由于Candle错误意味着您试图在同一个项目中设置两次“ProgramMenuFolder”目录。

当您在不同的片段,功能,组件中使用此目录时,尝试使用目录属性(directory =“ProgramMenuFolder”)。

如果要将其用作层次结构,则此目录应仅位于“TARGETDIR”目录下,对于所有其他预定义目录应相同。

答案 1 :(得分:0)

花了一些时间,但这是我如何解决问题。在使用VS2010安装程序的Win7中,我的安装包(即MSI文件)添加的快捷方式嵌套如下:

All Programs  
    CompanyName  
        ProductName  
            Version#
                App.exe  
                App.exe.config  
                App.pdf  

问题是Win10不支持上面的分层/嵌套结构。你能得到的最好的是一个扁平的结构如下:

All Programs  
    Product Name - Version#  
        App.exe  
        App.exe.config  
        App.pdf  

所以我希望我的WIX安装程序在Win7上安装时使用分层/嵌套的快捷方式结构,但是当在Win10上安装时,使用平面快捷方式结构。花了一些时间,但我能够使用两个FEATURE元素,每个元素都有自己的CONDITION元素。第一个FEATURE使用Win7和早期操作系统的分层开始菜单快捷方式结构。第二个FEATURE使用Win8和更高版本操作系统的平面开始菜单快捷键结构。简而言之,第一个FEATURE元素设置'LEVEL = 0',然后使用CONDITION元素仅在操作系统是Win7或更早版本时设置'LEVEL = 1'。类似地,第二个FEATURE元素设置'LEVEL = 0',然后仅在OS为Win8或更高版本时才使用CONDITION元素设置'LEVEL = 1)。这个解决方案仍然有一些问题需要纠正,需要花费太多时间才能做到正确,最后我将其废弃以获得更简单的解决方案。

我试图让Win7安装过程适应Win10,这导致了开始菜单快捷方式的问题。解决方案是扭转我的想法,而是将Win10的安装过程调整为Win7。更具体地说,编写WIX以安装Win10强加的开始菜单平面快捷方式结构非常容易。这个开始菜单平面快捷方式结构也适用于Win7和早期的操作系统。所以我的解决方案只是为所有支持的操作系统使用相同的开始菜单平面快捷方式结构。

刚刚开始学习WIX的人的悲惨遭遇:)):))

伊恩