Wix安装的应用程序(和快捷方式)显示管理员符号

时间:2015-03-20 10:11:29

标签: installation wix icons admin

成功创建和测试应用程序后,我还使用Wix手动为此应用程序创建了安装程序,而不是VS提供的ClickOnce。

无论如何,安装成功,将所有注册表项放在正确的位置,对于需要的文件,以及快捷方式(以及之后清理完所有文件)都是相同的。

这个问题并不重要,我真的很挑剔:D 在Wix安装程序正在安装的主要exe文件中,以及指向此的快捷方式,它们在图标的右下方有一个蓝色和黄色的小管理屏蔽。该应用程序不需要管理员权限才能正常工作,应用程序也不会实际启动UAC或以管理员身份运行(除非通过右键单击>以管理员身份运行)。

问题是如何防止将盾牌应用于应用程序和快捷方式图标?

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension">
    <?include "Macros.wxi" ?>

    <!-- Installation Settings -->
    <Product Id="*"
             Name="$(var.NameApp)"
             Language="1033"
             Version="1.0.0.0"
             Manufacturer="$(var.NameCompany)"
             UpgradeCode="$(var.GUID_Upgrade)">
        <Package InstallerVersion="200"
                 Compressed="yes"
                 InstallScope="perMachine"
                 Comments="Windows Installer Package"/>
        <Media Id="1"
               Cabinet="product.cab"
               EmbedCab="yes"/>
        <MajorUpgrade DowngradeErrorMessage="A newer version of this software is already installed" />

        <!-- .NET Framework Check -->
        <PropertyRef Id="NETFRAMEWORK40CLIENT" />
        <Condition Message="This application requires .NET Framework 4.0. Please install the .NET Framework then try again">
            <![CDATA[Installed OR NETFRAMEWORK40CLIENT]]>
        </Condition>

        <!-- Installation files, folders, reg-keys, shortcuts, etc -->
        <Directory Id="TARGETDIR" Name="SourceDir">
            <!-- Program Files Folder -->
            <Directory Id="ProgramFilesFolder">
                <!-- Company Application Folder -->
                <Directory Id="INSTALLDIR" Name="$(var.NameCompany)">
                    <!-- Main Application Files -->
                    <Component Id="CmpAppMain" Guid="$(var.GUID_CmpAppMain)">
                        <File Id="FileAppMainEXE" Source="$(var.PathExe)" Vital="yes" />
                        <RegistryKey Root="HKLM"
                                     Key="SOFTWARE\$(var.NameCompany)\$(var.NameApp)">
                            <RegistryValue Name="installed"
                                           Type="integer"
                                           Value="1"
                                           KeyPath="yes" />
                        </RegistryKey>
                    </Component>

                    <!-- Common DLLs for multiple apps -->
                    <Component Id="CmpAppLibs" Guid="$(var.GUID_CmpAppLibs)">
                        <File Id="FileDeviceDLL" Source="$(var.PathLibDevice)" Vital="yes" />
                        <File Id="FileUtilDLL" Source="$(var.PathLibUtil)" Vital="yes"/>
                        <RemoveFile Id="FileClrDevice" Directory="INSTALLDIR" Name="Comms.log" On="uninstall"/>

                        <RegistryKey Root="HKLM"
                                     Key="SOFTWARE\$(var.NameCompany)">
                            <RegistryValue Name="Lib Path"
                                           Type="string"
                                           Value="[INSTALLDIR]" />
                            <RegistryValue Name="Lib Ver"
                                           Type="string"
                                           Value="1.0.0"
                                           KeyPath="yes" />
                        </RegistryKey>
                    </Component>

                    <!-- Common Resource Files -->
                    <Directory Id="FolderResource" Name="rsc">
                        <Component Id="CmpAppRsc" Guid="$(var.GUID_CmpAppRscs)">
                            <File Id="RscOilDb" Source="$(var.PathRscOil)" Vital="no" KeyPath="yes"/>
                        </Component>
                    </Directory>

                </Directory>
                <!-- END - Company Application Folder -->
            </Directory>
            <!-- END - Program Files Folder -->

            <!-- Start Menu Folder -->
            <Directory Id="ProgramMenuFolder">
                <!-- Start Menu Company Folder -->
                <Directory Id="ProgramMenuCompany" Name="$(var.NameCompany)">
                    <Component Id="CmpLnks" Guid="$(var.GUID_CmpLnks)">
                        <Shortcut Id="LnkStartMenu" 
                                  Name="$(var.NameApp)"
                                  Description="$(var.NameApp)"
                                  Target="[INSTALLDIR]$(var.NameExe)"
                                  WorkingDirectory="INSTALLDIR">
                            <Icon Id="IconApp" SourceFile="$(var.PathRscIco)" />
                        </Shortcut>
                        <RegistryKey Root="HKCU"
                                     Key="SOFTWARE\$(var.NameCompany)">
                            <RegistryValue Name="Lnk"
                                           Type="integer"
                                           Value="1"
                                           KeyPath="yes" />
                        </RegistryKey>
                        <RemoveFolder Id="RemoveStartLnk" Directory="ProgramMenuCompany" On="uninstall" />
                    </Component>
                </Directory>
                <!-- END - Start Menu Company Folder -->
            </Directory>
            <!-- END - Start Menu Programs Folder -->
        </Directory>
        <!-- END - TARTGETDIR -->

        <Feature Id="FeatCore" Title="Core Application Files" Level="1">
            <ComponentRef Id="CmpAppMain" />
            <ComponentRef Id="CmpAppLibs" />
            <ComponentRef Id="CmpAppRsc" />
        </Feature>
        <Feature Id="FeatLnks" Title="Start Menu Shortcut" Level="1">
            <ComponentRef Id="CmpLnks" />
        </Feature>
    </Product>
</Wix>

1 个答案:

答案 0 :(得分:0)

  

应用程序是否有清单?我想知道它是否有了   highestavailable或asInvoker设置意味着它可能   有时提升,我从你所说的那里假设它没有   那里有一个requiresAdministrator设置。

     

清单几乎总是嵌入在exe本身中,这就是什么   需要验证。我猜这个exe是用一个   嵌入式清单。无需在安装中包含它。

感谢您的信息。问题在于由于ClickOnce设置而无法首先生成的清单,然后一旦我为项目生成或制作了我自己的清单,它也没有被嵌入到可执行文件。

ClickOnce发布使用它为您生成的安装程序将其置于安装目录中。因为我不想使用click一次(并且我在阅读了有关它将嵌入exe中的清单后假设)我的应用程序没有显示...

我现在唯一感到好奇的是,为什么默认行为是要求管理员权限(我认为这是默认情况下最糟糕的事情)。

无论如何......感谢您的帮助