Wix merge modules vc++ 9.0 SP1 not installing - visual-c++

I have a Wix installer that I have added the merge modules to for the last version of the VC++ 9.0 runtime. I've opened the .msm files with Orca to verify that they are the latest version, 9.0.30729.6161. I include the CRT msm in my installer just as it is done in the example on the Wix site:
<Fragment>
<DirectoryRef Id="TARGETDIR">
<?if $(var.Platform) = x64 ?>
<Merge Id="VCRedist" SourceFile="$(env.CommonProgramFiles)\Merge Modules\Microsoft_VC90_CRT_x86_x64.msm" DiskId="1" Language="0"/>
<?else?>
<Merge Id="VCRedist" SourceFile="$(env.CommonProgramFiles)\Merge Modules\Microsoft_VC90_CRT_x86.msm" DiskId="1" Language="0"/>
<?endif ?>
</DirectoryRef>
</Fragment>
Then in my features file:
<MergeRef Id="VCRedist" />
When I run the installer with logging on, I can see that the files are moved to the side by side directory, C:\Windows\winsxs. When I run my application, it does not recognize that the CRT is available.
If I run the redistributable installer from here, everything works as expected. I've tried including all the merge modules with no luck.
Any ideas?

Using the policy merge modules got it working for me.

Related

Reboot not required for .NET 4.0 after VS2012 runtime installation

My WPF application was running fine when built on VS2010 and using WiX3.5. I changed to VS2012 and installed the VS2012 runtime using Wix as below:
<DirectoryRef Id="TARGETDIR">
<Merge Id="VC110RedistCRT" SourceFile="C:\Program Files (x86)\Common Files\Merge Modules\Microsoft_VC110_CRT_x86.msm" DiskId="1" Language="0"/>
<Merge Id="VC110RedistMFC" SourceFile="C:\Program Files (x86)\Common Files\Merge Modules\Microsoft_VC110_MFC_x86.msm" DiskId="1" Language="0"/>
</DirectoryRef>
<Feature Id="VC110Redist" Title="Visual C++ 11.0 Runtime" AllowAdvertise="no" Display="hidden" Level="1">
<MergeRef Id="VC110RedistCRT"/>
<MergeRef Id="VC110RedistMFC"/>
</Feature>
Earlier with VS2010, application installation on new machine used to ask for reboot while installing .NET framework. Now with VS2012, it doesn't ask for reboot and application is running fine also.
I just wanted to know the possible reason and any side effects of this. Any details of how the C++ runtime and .Net Framework installation work with each other will be helpful.
Thanks

Unable to resolve JetBrains.ReSharper.SDK while installing a ReSharper's plugin

I'm trying to install a custom ReSharper's plugin I wrote using the ReSharper Extension Manager but I get the error
Attempting to resolve dependency 'JetBrains.ReSharper.SDK (≥
8.2.1158)'.
Unable to resolve dependency 'JetBrains.ReSharper.SDK (≥ 8.2.1158)'.
I followed the official documentation and here is my .nuspec.
<?xml version="1.0"?>
<package >
<metadata>
<id>CustomMacro</id>
<version>1.0.0.0</version>
<title>Custom macro</title>
<authors>Me</authors>
<description>do something</description>
<copyright>Copyright © 2014</copyright>
<tags>Cool Plugin</tags>
<dependencies>
<dependency id="ReSharper" version="[8.2,8.3]" />
</dependencies>
</metadata>
<files>
<file src="bin\Release\*.dll" target="ReSharper\vAny\vs12.0\plugins" />
</files>
</package>
Note: The nuget packaged is pushed inside my company's nuget repository and when I search for the package in the Extension Manager I do it from Online -> All tag
That .nuspec file looks fine, but doesn't match the error message. The error message indicates that the .nupkg has a dependency on "JetBrains.ReSharper.SDK". ReSharper uses NuGet packages in a runtime capacity, so development dependencies shouldn't be included. When installing, ReSharper will try to resolve any dependencies and install them (as runtime extensions, not assembly references). The "JetBrains.ReSharper.SDK" package is a nuget assembly reference package, and isn't required, or available on ReSharper's extension package gallery, so it fails to install.
I'd suggest getting NuGet Package Explorer and double clicking on the .nupkg to see if it's got the same .nuspec as you've shown.
Also, you should be copying the *.dll files into ReSharper\v8.2\plugins. It can't live in vAny because ReSharper plugins are compiled against specific versions of ReSharper. And it should only go in the vs12.0 folder if it's specific to Visual Studio 2013, i.e. it uses VS2013 assemblies and functionality.

MvvMCross 3.0.6 Nuget package installation issue

I am trying to install MVVMCross NuGet package using NuGet 2.5 version. I have added the mono android and touch file to Profile104 folder. Still I am getting following exception:
Attempting to resolve dependency 'MvvmCross.HotTuna.StarterPack (≥ 3.0.6)'.
Attempting to resolve dependency 'MvvmCross.HotTuna.CrossCore (≥ 3.0.6)'.
Attempting to resolve dependency 'MvvmCross.PortableSupport (≥ 3.0.6)'.
Installing 'MvvmCross.PortableSupport 3.0.6'.
Successfully installed 'MvvmCross.PortableSupport 3.0.6'.
Installing 'MvvmCross.HotTuna.CrossCore 3.0.6'.
Successfully installed 'MvvmCross.HotTuna.CrossCore 3.0.6'.
Installing 'MvvmCross.HotTuna.StarterPack 3.0.6'.
Successfully installed 'MvvmCross.HotTuna.StarterPack 3.0.6'.
Installing 'MvvmCross 3.0.6'.
Successfully installed 'MvvmCross 3.0.6'.
Adding 'MvvmCross.PortableSupport 3.0.6' to PortableClassLibrary1.
Uninstalling 'MvvmCross.PortableSupport 3.0.6'.
Successfully uninstalled 'MvvmCross.PortableSupport 3.0.6'.
Install failed. Rolling back...
Could not install package 'MvvmCross.PortableSupport 3.0.6'.
You are trying to install this package into a project that targets
'portable-win+net45+MonoAndroid16+MonoTouch40+sl40+wp', but the
package does not contain any assembly references or content files that
are compatible with that framework. For more information, contact the
package author.
I have selected following option when creating a new PCL Library project
Following are the content for the xml files from C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETPortable\v4.0\Profile\Profile104\SupportedFrameworks folder
.NET for Windows Store apps.xml
<?xml version="1.0" encoding="utf-8"?>
<Framework
Identifier=".NETCore"
Profile="*"
MinimumVersion="4.5"
DisplayName=".NET for Windows Store apps"
MinimumVersionDisplayName="" />
.NET Framework 4.5
<?xml version="1.0" encoding="utf-8"?>
<Framework
Identifier=".NETFramework"
Profile="*"
MinimumVersion="4.5"
DisplayName=".NET Framework"
MinimumVersionDisplayName="4.5" />
MonoAndroid.xml
<?xml version="1.0" encoding="utf-8"?>
<Framework DisplayName="Mono for Android"
Identifier="MonoAndroid"
Profile="*"
MinimumVersion="1.6"
MaximumVersion="*" />
MonoTouch.xml
<?xml version="1.0" encoding="utf-8"?>
<Framework
DisplayName="MonoTouch"
Identifier="MonoTouch"
Profile="*"
MaximumVersion="*"
MinimumVersion="4.0" />
Silverlight 4.xml
<?xml version="1.0" encoding="utf-8"?>
<Framework
Identifier="Silverlight"
Profile=""
MinimumVersion="4.0"
DisplayName="Silverlight"
MinimumVersionDisplayName="4" />
VSMonoTouch.xml
<?xml version="1.0" encoding="utf-8"?>
<Framework DisplayName="VS MonoTouch"
Identifier=".NETFramework"
Profile="*"
MinimumVersion="1.0"
MaximumVersion="1.0" />
Windows Phone 7.5.xml
<?xml version="1.0" encoding="utf-8"?>
<Framework
Identifier="Silverlight"
Profile="WindowsPhone7*"
MinimumVersion="4.0"
DisplayName="Windows Phone"
MinimumVersionDisplayName="7.5" />
I am using Visual Studio 2012 Ultimate Update 2 on Windows Server 2012 64 bit edition. Can someone point me in right direction.
It looks like you are targeting Windows Phone 7.0 in your Portable Class Library. Try switching to Windows Phone 7.5 and see if that helps. If not, try posting a screenshot of the PCL "choose targets" screen, as well as the contents of all the XML files you've added to the "SupportedFrameworks" folder.
EDIT: Try deleting VSMonoTouch.xml (and restarting Visual Studio afterwards).
The workaround mentioned on a comment on Stuart's blog (at http://slodge.blogspot.co.uk/2013/04/n0-first-mvvmcross-application-n1-days.html) worked for me:
Remove Mono for Android, MonoTouch, VS MonoTouch and Windows Phone from the Target Frameworks in the Core project properties. Install MvvmCross NuGet package. Add the Target Frameworks back in.
I just got an update to the NuGet.
It looks like it's working now.
Here are the steps to have MVVM Cross on a new project:
Create a new project Xamarin Android
Create a new project PCL library (select Mono Android, MonoTouch, and Windows Phone 7.5 and higher).
Add MVVMCross NuGet on both the app and PCL
Add the library as reference to the app
Without adding the MVVMCross also to the app, I get an error on compilation.
I have the same issue
Could not install package 'MvvmCross.PortableSupport 3.0.6'. You are
trying to install this package into a project that targets
'portable-win+net45+MonoAndroid16+MonoTouch40+sl40+wp71', but the
package does not contain any assembly references or content files that
are compatible with that framework. For more information, contact the
package author.
Per http://slodge.blogspot.co.uk/2013/04/my-current-pcl-setup-in-visual-studio.html, I do not have VSMonoTouch, just the two files (MonoAndroid,Version=v1.6+.xml and MonoTouch,Version=v1.0+.xml)
I also tried to
"Remove Mono for Android, MonoTouch, VS MonoTouch and Windows Phone from the Target Frameworks in the Core project properties. Install MvvmCross NuGet package. Add the Target Frameworks back in."
But when I try to compile, I get this error:
Error 1 Exception while loading assemblies:
System.IO.FileNotFoundException: Could not load assembly
'System.Windows, Version=2.0.5.0, Culture=neutral,
PublicKeyToken=7cec85d7bea7798e'. Perhaps it doesn't exist in the Mono
for Android profile? File name: 'System.Windows.dll' at
Xamarin.Android.Tuner.DirectoryAssemblyResolver.Resolve(AssemblyNameReference
reference, ReaderParameters parameters) at
Xamarin.Android.Tasks.ResolveAssemblies.AddAssemblyReferences(List1
assemblies, AssemblyDefinition assembly) at
Xamarin.Android.Tasks.ResolveAssemblies.AddAssemblyReferences(List1
assemblies, AssemblyDefinition assembly) at
Xamarin.Android.Tasks.ResolveAssemblies.AddAssemblyReferences(List`1
assemblies, AssemblyDefinition assembly) at
Xamarin.Android.Tasks.ResolveAssemblies.Execute() MyProject
I face this issue too. After googling to find solution I found that I use Nuget version 2.4
I upgrade my nuget to 2.6 and it run smoothly.
You can download nuget 2.6 here: Nuget 2.6
I wrote a step by step post for creating a simple Android app from scratch using PCL
http://enginecore.blogspot.ro/2013/05/first-app-with-xamarin-android-and.html

Missing prerequisites for Visual C++ in Visual Studio 2012

I've recently installed vs2012 and I've updated my ClickOnce application. To be more precise, the first time I've opened my C++ project (on which depends my primary c# project) I've not updated it and everything worked fine. VS 2012 was still able to see the Visual C++ 2010 prerequisite. Later on I've updated my project by changing the Platform Toolset to "Visual Studio 2012 (v110)" under Properties->Configuration Properties->General.
In the meantime I've installed even other software and now I discovered that I'm no more able to add the Visual C++ prerequisite to my project for the ClickOnce publishing. The Visual C++ 2010 Runtime Libraries (x64) prerequisite is marked with a yellow triangle and it is missing. Ideally I'd like to update to Visual C++ 2012 Runtime Libraries x64 (and x86), but even this prerequisite is missing.
I guess it is due to the fact that in the folder C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\Bootstrapper\Packages the corresponding package (vcredist_x64) is empty. I've also noticed that in the list of installed programs in the Control Panel I had Microsoft Visual C++ 2010 x64 and x86 installed, both the Redistributable version and the Runtime version (I think they where installed previously with Visual Studio 2010), while I was missing the Visual C++ 2012 files. Hence I'm arguing that the Visual C++ 2012 didn't come together with Visual Studio 2012, isn't it? I've even tried to install the Visual C++ 2012 Redistributable x64 packages by downloading them and now they are listed in my installed programs 8only the Redistributable, not the Runtime version).
However the prerequisite is still missing. How can I solve this? I've even thought about manually copying the bootstrapper package for Visual C++ 2010 located in the...\v7.0A\Bootstrapper\Packages folder and changing it manually for C++ 2012 but I do not know what I should write in product.xml under <MsiProductCheck Property="VCRedistInstalled" Product=?>. It seems that the product GUID to insert this information can be obtained with Bootstrapper Manager, but this program is throwing a lot of exception and I do not know how to do it. As a second solution is it safe to simply copying the package for Visual C++ 2010 from \\v7.0A\Bootstrapper\Packages\Bootstrapper\Packages to \v8.0A\Bootstrapper\Packages?
Go to \v8.0A\Bootstrapper\Packages and make sure you have the vcredist_x86 folder.
In that folder you should have an "en" folder, that should remain there, you are missing
product.xml
vcredist_x86.exe
You can download the required .exe from http://go.microsoft.com/fwlink/?LinkID=266495&clcid=0x409
As for the product.xml
<?xml version="1.0" encoding="utf-8" ?>
<Product
xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper"
ProductCode="Microsoft.Visual.C++.11.0.x86"
>
<!-- Defines list of files to be copied on build -->
<PackageFiles>
<PackageFile Name="vcredist_x86.exe" HomeSite="VCRedistExe"/>
</PackageFiles>
<InstallChecks>
<MsiProductCheck Property="VCRedistInstalled" Product="{6C772996-BFF3-3C8C-860B-B3D48FF05D65}"/>
</InstallChecks>
<!-- Defines how to invoke the setup for the Visual C++ 11.0 redist -->
<!-- TODO: Needs EstrimatedTempSpace, LogFile, and an update of EstimatedDiskSpace -->
<Commands Reboot="Defer">
<Command PackageFile="vcredist_x86.exe"
Arguments=' /q:a '
>
<!-- These checks determine whether the package is to be installed -->
<InstallConditions>
<BypassIf Property="VCRedistInstalled" Compare="ValueGreaterThanOrEqualTo" Value="3"/>
<!-- Block install if user does not have admin privileges -->
<FailIf Property="AdminUser" Compare="ValueEqualTo" Value="false" String="AdminRequired"/>
<!-- Block install on Win95 -->
<FailIf Property="Version9X" Compare="VersionLessThan" Value="4.10" String="InvalidPlatformWin9x"/>
<!-- Block install on NT 4 or less -->
<FailIf Property="VersionNT" Compare="VersionLessThan" Value="5.00" String="InvalidPlatformWinNT"/>
</InstallConditions>
<ExitCodes>
<ExitCode Value="0" Result="Success"/>
<ExitCode Value="3010" Result="SuccessReboot"/>
<DefaultExitCode Result="Fail" FormatMessageFromSystem="true" String="GeneralFailure" />
</ExitCodes>
</Command>
</Commands>
</Product>
For those looking for a similar answer for the 2012 x64 vcredist, here's one I cobbled together that seems to work. Note the download link is
http://download.microsoft.com/download/1/6/B/16B06F60-3B20-4FF2-B699-5E9B7962F9AE/VSU_4/vcredist_x64.exe
<?xml version="1.0" encoding="utf-8" ?>
<Product
xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper"
ProductCode="Microsoft.Visual.C++.11.0.x64"
>
<!-- Defines list of files to be copied on build -->
<PackageFiles>
<PackageFile Name="vcredist_x64.exe" HomeSite="VCRedistExe"/>
</PackageFiles>
<InstallChecks>
<MsiProductCheck Property="VCRedistInstalled" Product="{CF2BEA3C-26EA-32F8-AA9B-331F7E34BA97}"/>
</InstallChecks>
<!-- Defines how to invoke the setup for the Visual C++ 11.0 redist -->
<!-- TODO: Needs EstimatedTempSpace, LogFile, and an update of EstimatedDiskSpace -->
<Commands Reboot="Defer">
<Command PackageFile="vcredist_x64.exe"
Arguments=' /q:a '
>
<!-- These checks determine whether the package is to be installed -->
<InstallConditions>
<BypassIf Property="VCRedistInstalled" Compare="ValueGreaterThanOrEqualTo" Value="3"/>
<!-- Block install if user does not have admin privileges -->
<FailIf Property="AdminUser" Compare="ValueEqualTo" Value="false" String="AdminRequired"/>
<!-- Block install on any platform other than x64 -->
<FailIf Property="ProcessorArchitecture" Value="AMD64" Compare="ValueNotEqualTo" String="InvalidOS"/>
<!-- Block install on Vista or below -->
<FailIf Property="VersionNT" Compare="VersionLessThan" Value="6.00" String="InvalidPlatformWinNT"/>
</InstallConditions>
<ExitCodes>
<ExitCode Value="0" Result="Success"/>
<ExitCode Value="3010" Result="SuccessReboot"/>
<DefaultExitCode Result="Fail" FormatMessageFromSystem="true" String="GeneralFailure" />
</ExitCodes>
</Command>
</Commands>
</Product>

Specifying a VC++ Redistributable version for ClickOnce prerequisite

My ClickOnce application uses a third party tool that requires the Visual C++ 2005 redistributable. The third party tool will not work if only the VC++ 2008 redistributable is installed. However, in Visual Studio 2008, the ClickOnce prerequisites do not allow a version to be specified for the VC++ redistributable; it will add a VC++ 2008 prerequisite, which makes sense most of the time. However, in this situation, an earlier version is required. ClickOnce is required, so merge modules are out of the question. Any ideas of how to specify the version?
If you can find a machine with VS 2005 installed, the solution shouldn't be too hard. You have the ability to customize what appears in the Prerequisites dialog on the Publish tab of your project.
On a machine with VS 2005 installed, go to \Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages and copy the vsredist_x86 folder to the machine you are publishing from.
Rename the folder, call it vsredist_x86_2005 or something similar.
Inside the folder, edit the \en\package.xml file. Change the <String Name="DisplayName"> tag to something that makes sense (Visual C++ 2005 Runtime Libraries (x86)) to differentiate it from the existing 2008 package.
Copy the folder to C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages.
Restart Visual Studio if it is open.
Now, when you open the Prerequisites dialog you should see a new entry for the 2005 package. I didn't completely test this solution so I may have missed a few details but hopefully this gets you started.
I believe you can open the manifest file for your app and modify the versions of the redists your app should be linking against. The listings in the manifest should match what you have in your C:\Windows\WinSxS dirs. There is a CodeProject page that gives a good description of using different redistributables.
I just installed Visual Studio 2005. Here is an original bootstrapper:
C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\vcredist_x86\
\en\package.xml
<?xml version="1.0" encoding="utf-8" ?>
<Package
xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper"
Name="DisplayName"
Culture="Culture"
>
<!-- Defines a localizable string table for error messages-->
<Strings>
<String Name="DisplayName">Visual C++ Runtime Libraries (x86)</String>
<String Name="Culture">en</String>
<String Name="AdminRequired">You do not have the permissions required to install Visual C++ Runtime Libraries (x86). Please contact your administrator.</String>
<String Name="InvalidPlatformWin9x">Installation of Visual C++ Runtime Libraries (x86) is not supported on Windows 95. Contact your application vendor.</String>
<String Name="InvalidPlatformWinNT">Installation of Visual C++ Runtime Libraries (x86) is not supported on Windows NT 4.0. Contact your application vendor.</String>
<String Name="GeneralFailure">A failure occurred attempting to install Visual C++ Runtime Libraries (x86).</String>
</Strings>
</Package>
\product.xml
<?xml version="1.0" encoding="utf-8" ?>
<Product
xmlns="http://schemas.microsoft.com/developer/2004/01/bootstrapper"
ProductCode="Microsoft.Visual.C++.8.0.x86"
>
<!-- Defines list of files to be copied on build -->
<PackageFiles>
<PackageFile Name="vcredist_x86.exe"/>
</PackageFiles>
<InstallChecks>
<MsiProductCheck Property="VCRedistInstalled" Product="{A49F249F-0C91-497F-86DF-B2585E8E76B7}"/>
</InstallChecks>
<!-- Defines how to invoke the setup for the Visual C++ 8.0 redist -->
<!-- TODO: Needs EstrimatedTempSpace, LogFile, and an update of EstimatedDiskSpace -->
<Commands Reboot="Defer">
<Command PackageFile="vcredist_x86.exe"
Arguments=' /q:a '
>
<!-- These checks determine whether the package is to be installed -->
<InstallConditions>
<BypassIf Property="VCRedistInstalled" Compare="ValueGreaterThanOrEqualTo" Value="3"/>
<!-- Block install if user does not have admin privileges -->
<FailIf Property="AdminUser" Compare="ValueEqualTo" Value="false" String="AdminRequired"/>
<!-- Block install on Win95 -->
<FailIf Property="Version9X" Compare="VersionLessThan" Value="4.10" String="InvalidPlatformWin9x"/>
<!-- Block install on NT 4 or less -->
<FailIf Property="VersionNT" Compare="VersionLessThan" Value="5.00" String="InvalidPlatformWinNT"/>
</InstallConditions>
<ExitCodes>
<ExitCode Value="0" Result="Success"/>
<ExitCode Value="3010" Result="SuccessReboot"/>
<DefaultExitCode Result="Fail" FormatMessageFromSystem="true" String="GeneralFailure" />
</ExitCodes>
</Command>
</Commands>
</Product>
\vcredist_x86.exe
SHA1: 95040f80b0d203e1abaec4e06e0ec0e01c507d03

Resources