- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个带有对话框的 MSI,提示用户 [1] 浏览到安装目录,[2] 接受 EULA,[3] 安装完成后启动应用程序。
我将 MSI 包装在 Burn Bundle 中以制作 EXE。现在我看到的只是 EXE 的 EULA 提示,但没有提示选择安装目录或启动应用程序。
我想用EXE格式,因为客户看懂了,我可以关联我的图标,在EXE中嵌入我的版本号,然后提示输入管理员密码。客户将我的软件作为单个可执行文件下载。
这是代码:
<WixVariable Id="WixStdbaLogo" Value="MyIcon.ico" />
<Variable Name="InstallFolder" Type="string" Value="[ProgramFilesFolder]MyCompany\MyProduct"/>
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
<WixVariable Id="WixStdbaLicenseRtf" Value="MyLicense.rtf" />
<Chain>
<MsiPackage
Id="Setup"
Compressed="yes"
SourceFile="MyProduct.msi"
Vital="yes"
DisplayInternalUI="yes"
EnableFeatureSelection="yes"
>
<MsiProperty Name="INSTALLLOCATION" Value="[InstallFolder]" />
</MsiPackage>
</Chain>
<Product Id="*" Name="My Product" Language="1033" Version="5.0.0"
Manufacturer="My Company" UpgradeCode="0bd6d4cf-d23d-431a-9baf-c72cb0525f0c">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MajorUpgrade DowngradeErrorMessage="A newer version of My Program is already installed." />
<MediaTemplate EmbedCab="yes" CompressionLevel="high"/>
<Feature Id="ProductFeature" Title="My Product" Level="1">
<ComponentGroupRef Id="ProductComponents" />
</Feature>
<!-- Set Installer's Icon in Add/Remove Programs -->
<Icon Id="icon.ico" SourceFile="MyProduct.ico"/>
<Property Id="ARPPRODUCTICON" Value="icon.ico" />
<Property Id="ProductSeed"> 3022 </Property>
<Binary Id="PlantSeedDLL" SourceFile="..\..\PlantSeed\Release\PlantSeed.DLL" />
<CustomAction Id="DLLPlantSeed" BinaryKey="PlantSeedDLL" DllEntry="PlantSeedFunc"
Execute="immediate" Return="check" HideTarget="no" Impersonate="yes"/>
<!-- Step 1: Define the directory structure -->
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLFOLDER" Name="My Product"/>
</Directory>
<!-- Shortcut on Start Menu -->
<Directory Id="ProgramMenuFolder">
<Directory Id="ApplicationProgramsFolder" Name="My Product"/>
</Directory>
<!-- Desktop shortcut -->
<Directory Id="DesktopFolder" Name="Desktop">
</Directory>
</Directory>
<CustomAction Id="Install_PDF_printer" FileKey="Install.exe"
ExeCommand='Install.exe -s "My PDF Printer" -n "My Company Inc." -c "****************"'
Execute="deferred" Return="check" HideTarget="no" Impersonate="no" />
<!-- Banner images -->
<!-- <WixVariable Id="MainLogoBmp" Value="Resources/Images/weblabel.jpg" /> -->
<WixVariable Id="WixUIBannerBmp" Value="MyProduct iconWiXbanner.jpg" /> <!-- 493 × 58 -->
<WixVariable Id="WixUIDialogBmp" Value="MyProduct 616x390.jpg" /> <!-- 616 × 390 -->
<!-- License (not necessary to have it as a component) -->
<WixVariable Id="WixUILicenseRtf" Value="MyProduct License.rtf" />
<!-- Prompt for install directory -->
<Property Id="WIXUI_INSTALLDIR" Value="INSTALLFOLDER" />
<UIRef Id="WixUI_InstallDir" />
<!-- Display checkbox Prompt to run EXE at end -->
<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOX" Value="1"/> <!-- Default to checked -->
<Property Id="WIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" Value="Launch My Product" />
<Property Id="WixShellExecTarget" Value="[#MyProduct.exe]" />
<CustomAction Id="LaunchApplication" BinaryKey="WixCA" DllEntry="WixShellExec" Impersonate="yes" />
<!-- Prompt to run EXE at end -->
<UI>
<UIRef Id="WixUI_FeatureTree"/> <!-- causes compilation errors -->
<Publish Dialog="ExitDialog"
Control="Finish"
Event="DoAction"
Value="LaunchApplication">
WIXUI_EXITDIALOGOPTIONALCHECKBOX = 1 and NOT Installed
</Publish>
</UI>
<UI> <!-- For the dialogs -->
<TextStyle Id="Font10" FaceName="Tahoma" Size="10" Red="0" Green="0" Blue="0" />
<TextStyle Id="Font12" FaceName="Tahoma" Size="12" Red="0" Green="0" Blue="0" />
</UI>
<!-- Include dialogs -->
<Property Id="ApplicationFolderName" Value="MyProduct Folder" /> <!-- WixUI_Advanced -->
<Property Id="WixAppFolder" Value="WixPerMachineFolder" /> <!-- WixUI_Advanced -->
<!-- Install for all users -->
<WixVariable Id="WixUISupportPerUser" Value="0" /> <!-- WixUI_Advanced -->
<!-- Write product key in Registry -->
<DirectoryRef Id="TARGETDIR">
<Component Id="RegistryEntries" Guid="*">
<!-- HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\My Company Inc.\My Product -->
<RegistryKey Root="HKLM"
Key="Software\My Company Inc.\My Product" >
<RegistryValue Type="string" Name="TARGET" Value="[INSTALLFOLDER]"/>
</RegistryKey>
</Component>
</DirectoryRef>
<!-- Shortcut on Start Menu -->
<DirectoryRef Id="ApplicationProgramsFolder">
<Component Id="ApplicationShortcut" Guid="*">
<Shortcut Id="ApplicationStartMenuShortcut"
Name="My Product"
Description="My Product"
Target="[INSTALLFOLDER]MyProduct.exe"
WorkingDirectory="INSTALLFOLDER"
/>
<RemoveFolder Id="ApplicationProgramsFolder" On="uninstall"/>
<RegistryValue Root="HKCU" Key="Software\Microsoft\My Product" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
</Component>
</DirectoryRef>
<!-- Step 2: Add files to your installer package -->
<DirectoryRef Id="INSTALLFOLDER">
<Component Id="MyProduct.exe" Guid="*">
<File Id="MyProduct.exe" Name="MyProduct.exe"
Source="..\\..\\Release\\MyProduct.exe"
KeyPath="yes" Checksum="yes">
<!-- Desktop shortcut -->
<Shortcut Advertise="yes"
Id="MyProductDesktopShortcut"
Directory="DesktopFolder"
Name="My Product"
WorkingDirectory="INSTALLFOLDER"
Description="My Product"
Icon="MyProduct.ico">
<Icon Id="MyProduct.ico" SourceFile="MyProduct.ico" />
</Shortcut>
</File>
</Component>
<Component Id="MyProduct.chm" Guid="*">
<File Id="MyProduct.chm" Source="MyProduct.chm" KeyPath="yes" Checksum="yes"/>
</Component>
<Component Id="MyProduct.bmp" Guid="*">
<File Id="MyProduct.bmp" Source="MyProduct.bmp" KeyPath="yes" Checksum="yes"/>
</Component>
<Component Id="MyProduct.ico" Guid="*">
<File Id="MyProduct.ico" Source="MyProduct.ico" KeyPath="yes" Checksum="yes"/>
</Component>
<!-- Many, many more components... -->
</DirectoryRef>
<!-- Step 3: Tell WiX to install the files -->
<Feature Id="MainApplication" Title="Main Application" Level="1">
<ComponentRef Id="MyProduct.exe" />
<ComponentRef Id="MyProduct.bmp" />
<ComponentRef Id="MyProduct.ico" />
<ComponentRef Id="MyProduct.chm" />
<ComponentRef Id="ApplicationShortcut" />
<ComponentRef Id="RegistryEntries" /> <!-- Registry entry -->
</Feature>
<InstallExecuteSequence>
<!-- Before="InstallFinalize" -->
<Custom Action="Install_PDF_printer" After="InstallFiles" />
</InstallExecuteSequence>
<!-- Calculate Trial Expiry date, write to Registry -->
<InstallExecuteSequence>
<Custom Action="DLLPlantSeed" After="InstallFiles" />
</InstallExecuteSequence>
</Product>
<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<!-- TODO: Remove the comments around this Component element
and the ComponentRef below in order to add resources to this installer. -->
<!-- <Component Id="ProductComponent"> -->
<!-- TODO: Insert files, registry keys, and other resources here. -->
<!-- </Component> -->
</ComponentGroup>
</Fragment>
最佳答案
反之亦然:尝试 supress WIX ExitDlg在 MSI
并留下您的 BA
对话。
关于WiX:当封装在 Burn/EXE 中时,如何显示 MSI 的对话框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17374234/
我需要使用封装打印3个变量,并且无法修改主类。 主类声明变量[汽缸、制造商、所有者],并希望使用如下参数创建和打印一个对象: System.out.println (new Vehicle (cyli
我正在研究“Beginning Ruby”这本书,在我进行封装之前一切都进行得很顺利。我明白这段代码在做什么,我只是不知道为什么要用这些方法设置它。 对于那些感兴趣的人 this is the lin
所以我一直在研究面向对象的完整开发 JavaScript 实践,并对以下示例感到好奇。 据我了解,(这对我来说很有意义)以下“ secret ”字段是“私有(private)”的: var MyObj
在面向对象程式设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函式接口的实作细节部份包装、隐藏起来的方法。 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代
封装 被定义为 把一个或多个项目封闭在一个物理的或者逻辑的包中 。在面向对象程序设计方法论中,封装是为了防止对实现细节的访问。 抽象和封装是面向对象程序设计的相关特性。抽象允许相关信息可
今天我读了一本书,作者写道,在一个设计良好的类中,访问属性的唯一方法是通过其中一个类方法。这是一个被广泛接受的想法吗?为什么封装属性如此重要?不做会有什么后果?我早些时候在某处读到这可以提高安全性或类
今天我接受了软件工程职位的面试。我已经从 stackoverflow 中阅读了很多关于面试的内容。他们向我询问了与 OOP 相关的正常情况。但他们也问我这些: 没有继承就可以封装吗? 没有继承就可以抽
我正在制作一个简单的网站,并编写了gradle构建脚本,该脚本将执行诸如lint并最小化css / html / js之类的事情。 在这一阶段,我刚刚完成了正在运行的CSS,但是只是初始的非结构化格式
下面的幻灯片是指 C++ 语言,它说 "encapsulation is about ensuring the user uses our ADT in a safe way" 但是,如果他可以访问我
尝试设置一个 Person 类 我在尝试将信息封装在类中以使其不会被意外更改时遇到了问题。除了当我尝试使用 setter/getters 进行封装时,该类工作得非常好。我认为问题是这些方法最终会互相循
面向对象的概念:封装、数据抽象和数据隐藏是3个不同的概念,但彼此之间非常相关。所以我很难通过阅读互联网上的信息来完全理解这些概念。一个地方可用的信息与互联网上另一个地方的信息相矛盾。有人可以指导我阅读
我被封装困住了。在我看来,好像我已经按照规则做了一切,但仍然不起作用。虽然我知道我错过了一些东西。我正在使用 Eclipse。 我想要通过创建一副标准 52 张卡片来进行一些练习,并尝试我学到的新东西
在java中,要获取映射中的所有键,我们可以使用方法keySet。但我想知道为什么方法名称不只是 keys ?名称 Set 是否会泄露有关实现的详细信息? 据我了解,Java 是静态类型语言,名称中包
我正在尝试找出如何防止应用程序中的页面变量被全局定义。我想出了一些方法,但我想知道是否有人们使用的通用标准方法。 我使用这种方法得到了我的插件设计模式:http://www.virgentech.co
我有一个 tcp 连接,我想在服务器类的 HandleConnectionAsync 方法中保持打开状态。它将从客户端接收持续更新。 private async void HandleConnecti
这是我类(class)的一个小样本: #include #include using std::string; using std::vector; struct Book { string
我想要类似下面的代码: class Foo{ public: void update() { for( auto dataModifier : _dataModifierLis
这已经困扰我一段时间了,所以我问了一个同事他是否能理解它,现在我来了;) 为什么可以在依赖属性的 PropertyChangedCallback 中访问持有类的私有(private)成员? 让我通过这
我知道封装意味着一个对象不应该直接访问不同对象的成员……但我猜它与公共(public)领域有关?我假设公共(public)方法不会破坏封装..?我只是在这里不清楚,很高兴得到任何解释。 最佳答案
我就废话不多说了,大家还是直接看代码吧~ ? 1
我是一名优秀的程序员,十分优秀!