创建引用Microsoft软件包的Internet下载引导程序的最佳实践是什么?
例如,InstallShield有一个安装程序先决条件,可以通过go.microsoft.com/fwlink链接ID从Microsoft.com下载vstor40_x86.exe,该链接ID解析为该EXE的下载URL.InstallShield没有为vstor40_x64.exe创建PRQ,我需要创建一个PRQ.我找到了包含x86/x64.exe下载链接的Microsoft页面,但是我找不到解析为x64的fwlink ID.
微软在这方面的立场是什么?他们是否在任何地方记录了fwlink ID,他们是否希望我们链接到Microsoft,以便他们可以控制可用性,或者这是一种不好的做法,只是从微软中解脱出来?
为我的MVC 2应用程序创建引导程序的最佳方法是什么?我正在使用Unity和AutoMapper,并希望尽可能地抽象它们的加载和配置.
这里有一个很好的例子(http://weblogs.asp.net/rashid/archive/2009/02/17/use-bootstrapper-in-your-asp-net-mvc-application-and-reduce-code-smell. aspx ),但UnityContainer实现了IDisposable,在这个例子中它永远不会被清除.这(在Bootstrapper中配置自动映射违反了开放 - 封闭原则?)也是一个不错的例子,但他也没有处理Unity/Disposable问题.
这是(http://www.dominicpettifer.co.uk/Blog/42/put-an-ioc-powered-bootstrapper-in-your-asp-net-mvc-application)另一个如何做Bootstrapper的好例子,但同样没有解决Unity/Disposable问题.
我想在一个静态变量中保持我的Bootstrapper对象,并使它实现IDisposable,但这听起来不对.
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"
xmlns:netfx='http://schemas.microsoft.com/wix/NetFxExtension'>
<Bundle Name="IPDev" Version="0.6" Manufacturer="MYAPP Corporation" UpgradeCode="f380ae43-5df1-4cfe-9297-526e3e638e57">
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
<Chain>
<!-- TODO: Define the list of chained packages. -->
<PackageGroupRef Id="Netfx45FullPackage"/>
</Chain>
</Bundle>
<Fragment>
<!--checking for matlab 2012a installation-->
<util:RegistrySearch Id="MatlabPath"
Variable="UniqueId"
Root="HKLM"
Key="SOFTWARE\MathWorks\MATLAB\4.17\"
Result="exists"
Win64="yes"
/>
<!--checking for matlab MCR 2012a 64 bit installation-->
<util:RegistrySearch Id="MatlabMCRPath"
Variable="UniqueId"
Root="HKLM"
Key="SOFTWARE\MathWorks\MATLAB Compiler Runtime\7.17\"
Result="exists"
Win64="yes"
/>
<PackageGroup Id="Netfx45FullPackage">
<ExePackage Id="Netfx45Xxx" Cache="no" Compressed="no" PerMachine="yes" Permanent="yes" Vital="no" InstallCommand="/q"
SourceFile="..\SetupProject\dotnetfx45_full_x86_x64.exe"
DetectCondition="(Netfx4FullVersion="4.5.50709") AND (NOT VersionNT64 OR (Netfx4x64FullVersion="4.5.50709"))" …Run Code Online (Sandbox Code Playgroud) 我使用的是WiX 3.7,我无法使用简单的<PackageGroupRef Id ="NetFx40Web"/> bundle元素,因为它不会带来Net FX安装程序包,或者将它嵌入到setup.exe中.我已经在我的Bundle.wxs文件中为此创建了自己的包,但我仍然遇到了麻烦.它似乎总是尝试安装.NET 4,即使机器已经安装了.NET.
我不太确定InstallCondition和DetectCondition之间的区别.我认为如果评估为true,则使用InstallCondition来安装软件包,否则将其卸载.如何处理通常是永久性的东西=是,例如大多数先决条件?我认为,DetectCondition几乎完全相反,它检查它是否已经在系统上,如果是,则不安装它.
下面是我Bundle.wxs在Visual Studio WiX Bootstrapper项目中的完整文件.我试图查看注册表和.NET 4.0注册表项的范围.如果它存在,那么我不想安装.NET 4.如果它不存在,那么安装它.但是,这不起作用,它总是尝试安装.NET.
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Bundle
Name="MyProgramBootstrapper"
Version="1.0.0.0"
Manufacturer="Microsoft"
UpgradeCode="{2299B51D-9FD8-4278-90C8-2B79DB37F402}">
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
<Chain>
<PackageGroupRef Id="Netfx4Full"/>
<MsiPackage
Id="MyProgramInstaller"
SourceFile="$(var.MyProgramInstaller.TargetPath)"
Compressed="no"/>
</Chain>
</Bundle>
<Fragment>
<Property Id="NET40_FULL_INSTALL_32">
<RegistrySearch
Id ="SearchNet40_32bit"
Root="HKLM"
Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full"
Name="Version"
Type ="raw"/>
</Property>
<Property
Id="NET40_FULL_INSTALL_64">
<RegistrySearch
Id ="SearchNet40_64bit"
Root="HKLM"
Key="SOFTWARE\Microsoft\Net Framework Setup\NDP\v4\Full"
Name="Version"
Type ="raw"
Win64="yes" /> …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用msbuild GenerateBootstrapper任务来分发带有框架的.net应用程序,而无需使用Internet连接来安装它.
我发现很多帖子都在这里引出相同的说明:
为.NET Framework 3.5 SP1引导程序启用Samesite
按照说明操作后,我仍然无法生成引导程序.我可以看到的更明显的问题是从dotNetFx35.exe中提取文件不会提取与自述文件上显示的文件和文件夹相同的文件和文件夹列表(例如,TOOLS文件夹不存在).
我究竟做错了什么?我是否遵循旧的指示?
msbuild错误如下:
C:\svn\GII\5.1b\Installer\src\Installer\Installer.wixproj(103,5): error MSB3152: The install location for prerequisites has not been set to 'component vendor's web site' and the file 'DotNetFX35SP1\TOOLS\clwireg.exe' in item '.NET Framework 3.5 SP1' can not be located on disk. See Help for more information.
C:\svn\GII\5.1b\Installer\src\Installer\Installer.wixproj(103,5): error MSB3152: The install location for prerequisites has not been set to 'component vendor's web site' and the file 'DotNetFX35SP1\TOOLS\clwireg_x64.exe' in item '.NET Framework 3.5 SP1' can not be located on …Run Code Online (Sandbox Code Playgroud) 我用WiX 3.7编写了一个首先安装.net 4.5的引导程序,然后是我的应用程序的MSI:
<Chain>
<PackageGroupRef Id="NetFx45Redist"/>
<MsiPackage Id="MainAppPackage"
After="NetFx45Redist"
SourceFile="..\bin\Debug\MyApp.msi"/>
</Chain>
Run Code Online (Sandbox Code Playgroud)
该WiX的文件说,NetFx45Redist是一个独立的设置,同时NetFx45Web为网络设置.在我使用设置为Id的引导程序NetFx45Redist构建之后,与使用NetFx45Web指定的Id 构建它时相比,它具有相同的大小.我很好奇所以我下载了WiX源(v3.7).我惊讶地发现这两个PackageGroup元素之间几乎没有什么区别.
该DownloadUrl对NetFx45Web是http://go.microsoft.com/fwlink/?LinkId=225704,而一个NetFx45Redist是http://go.microsoft.com/fwlink/?LinkId=225702.根据RemotePayload\@Size属性NetFx45Web是1005568字节并且NetFx45Redist是50352408字节.
我希望NetFx45Redist在我的引导程序中包含.net 4.5设置,不需要下载.我觉得这是错的.PackageGroup我应该使用哪个,以及2个下载的.net 4.5安装之间有什么区别?
我开始玩Managed Boostrapper类和事件.简而言之,我添加了BoostrapperCore.dll,它会给你命名空间
Microsoft.Tools.WindowsInstallerXml.Bootstrapper
我能够从不同博客中的一些示例中获得一些信息.例如,入口点是BootstrapperApplication.Run(),在bootstrapper应用程序准备好运行时被调用.
然后有一些事件,如:
BoostrapperApplication.DetectBegin
BoostrapperApplication.DetectPackageBegin
BoostrapperApplication.DetectForward
Run Code Online (Sandbox Code Playgroud)
等等......
问题:是否有任何精确的文档/在线帮助,提供Microsoft.Tools.WindowsInstallerXml.Bootstrapper命名空间中的事件和方法的详细信息和顺序?
这肯定会节省很多时间......
问候
我有一个安装MSI包的引导程序.
我怎样才能实现至少msi-package-installation被记录(详细日志记录)?我在哪里可以设置日志文件路径?因为我猜不能记录所有内容?
不,我不想要一个cmd解决方案,我需要在我的设置中实现这一点
找到LogPathVariable,但不知道它是如何工作的?
<MsiPackage SourceFile="$(var.Setup.TargetPath)" LogPathVariable="" />
Run Code Online (Sandbox Code Playgroud)
谷歌周围多次搜索并没有找到解决这个问题的方法,有什么帮助吗?
我们正在尝试使用自定义.NET Bootstrapper通过我们的WiX安装程序有选择地在MSI包中安装功能.
注册到PlanMsiFeature活动后,我们认为我们可以访问MSI中的功能,并根据预设条件排除某些功能.但是,该事件似乎从未被调用过.有没有人设法成功使用此活动?
非常感谢.
我正在使用Gentoo框,我想在不使用root帐户或sudo的情况下创建基于Debian的chroot环境.
这似乎可以使用fakeroot和fakechroot等工具,但到目前为止我还没有取得任何成功.这是我用于Precise的命令:
fakeroot fakechroot /usr/sbin/debootstrap --variant=fakechroot precise ./precise http://archive.ubuntu.com/ubuntu/
Run Code Online (Sandbox Code Playgroud)
它始终失败并出现相同的错误:
I: Installing core packages...
W: Failure trying to run: chroot precise dpkg --force-depends --install /var/cache/apt/archives/base-passwd_3.5.24_amd64.deb
W: See precise/debootstrap/debootstrap.log for details
Run Code Online (Sandbox Code Playgroud)
debootstrap.log的内容是:
dpkg: error while loading shared libraries: libselinux.so.1: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我不知道为什么SELinux被拉进来以及为什么它没有正确处理这种依赖.此外,我也试图建立Wheezy和Jessie.同样的错误.
这是怎么回事?版本:
debootstrap的-1.0.67
fakeroot的-1.19
fakechroot-2.17.2
内核3.19.6