1

私はVS 2010 SP1を使用しており、アプリケーションをインストールするためのVSセットアッププロジェクトを作成しました。私のアプリはC++で書かれたDLLを使用しているので、VC++ 2010ランタイムライブラリを含める必要があります。私のユーザーのVisual Studio 2010 SP1セットアッププロジェクトでSP1のVisual C++ 2010ランタイムライブラリがインストールされない

一つは、私のインストーラを実行中にエラーを取得して報告し、私は、このユーザーが既にインストールされているVC++ 2010ランタイムライブラリのSP1バージョンを持っているという事実のためにそれをトレースします。私のインストーラは、SP1以外のバージョンをインストールしようとしましたが、新しいバージョン(SP1バージョン)がインストールされているのを見て終了しました。 http://social.microsoft.com/Forums/en/crm/thread/db84d4c3-c58e-4ff9-997f-f4e0116bf043http://notepad.patheticcockroach.com/1666/installing-visual-c-2010-and-windows-sdk-for-windows-7-offline-installer-and-installation-troubleshooting/

それはSP1ランタイムライブラリをアンインストールしてから、私のインストーラを実行することで、ユーザーのための唯一の回避策のように思える: screenshot of error screenshot of error

私は、これがここでの問題の源である確認されました。明らかに、これは理想的ではないので、私はより良い解決策を探しています。

私が作ってみただけではなく、MicrosoftのSP1リンク(http://download.microsoft.com/download/C/6/D/C6D0FD4E-9E53-4897-9B91-836EBA2AACD3/vcredist_x86.exe)からランタイムライブラリをダウンロードするには、私のVSのセットアッププロジェクトを伝えることです。これはハックのように感じるので少し気になります。誰もが良いアイデアを持っていますか?

それは便利だ場合は、ここではこのバグをヒットし、ユーザからのログをインストールします:Visual Studioのセットアッププロジェクトでの

The following properties have been set: 
Property: [AdminUser] = true {boolean} 
Property: [InstallMode] = HomeSite {string} 
Property: [ProcessorArchitecture] = AMD64 {string} 
Property: [VersionNT] = 6.1.1 {version} 
Running checks for package 'Windows Installer 3.1', phase BuildList 
The following properties have been set for package 'Windows Installer 3.1': 
Running checks for command 'WindowsInstaller3_1\WindowsInstaller-KB893803-v2-x86.exe' 
Result of running operator 'VersionGreaterThanOrEqualTo' on property 'VersionMsi' and value '3.1': true 
Result of checks for command 'WindowsInstaller3_1\WindowsInstaller-KB893803-v2-x86.exe' is 'Bypass' 
'Windows Installer 3.1' RunCheck result: No Install Needed 
Running checks for package 'Visual C++ 2010 Runtime Libraries (x86)', phase BuildList 
Running MsiProductCheck with ProductCode '{196BB40D-1578-3D01-B289-BEFC77A11A1E}' 
MsiQueryProductState returned '-1' 
Setting value '-1 {int}' for property 'VCRedistInstalled' 
The following properties have been set for package 'Visual C++ 2010 Runtime Libraries (x86)': 
Property: [VCRedistInstalled] = -1 {int} 
Running checks for command 'vcredist_x86\vcredist_x86.exe' 
Result of running operator 'ValueGreaterThanEqualTo' on property 'VCRedistInstalled' and value '3': false 
Result of running operator 'ValueEqualTo' on property 'AdminUser' and value 'false': false 
Skipping FailIf because Property 'Version9X' was not defined 
Result of running operator 'VersionLessThan' on property 'VersionNT' and value '5.00': false 
Result of checks for command 'vcredist_x86\vcredist_x86.exe' is 'Install' 
'Visual C++ 2010 Runtime Libraries (x86)' RunCheck result: Install Needed 
Running checks for package 'Microsoft .NET Framework 4 Client Profile (x86 and x64)', phase BuildList 
Reading value 'Version' of registry key 'HKLM\Software\Microsoft\NET Framework Setup\NDP\v4\Client' 
Read string value '4.0.30319' 
Setting value '4.0.30319 {string}' for property 'DotNet40Client_TargetVersion' 
The following properties have been set for package 'Microsoft .NET Framework 4 Client Profile (x86 and x64)': 
Property: [DotNet40Client_TargetVersion] = 4.0.30319 {string} 
Running checks for command 'DotNetFX40Client\dotNetFx40_Client_x86_x64.exe' 
Result of running operator 'ValueEqualTo' on property 'InstallMode' and value 'HomeSite': true 
Result of checks for command 'DotNetFX40Client\dotNetFx40_Client_x86_x64.exe' is 'Bypass' 
Running checks for command 'DotNetFX40Client\dotNetFx40_Client_setup.exe' 
Result of running operator 'ValueNotEqualTo' on property 'InstallMode' and value 'HomeSite': false 
Result of running operator 'VersionGreaterThanOrEqualTo' on property 'DotNet40Client_TargetVersion' and value '4.0.30129': true 
Result of checks for command 'DotNetFX40Client\dotNetFx40_Client_setup.exe' is 'Bypass' 
'Microsoft .NET Framework 4 Client Profile (x86 and x64)' RunCheck result: No Install Needed 
Installation of components 'Visual C++ 2010 Runtime Libraries (x86)' was accepted. 
Copying files to temporary directory "C:\Users\JAGDISH\AppData\Local\Temp\VSD653B.tmp\" 
Downloading files to "C:\Users\JAGDISH\AppData\Local\Temp\VSD653B.tmp\" 
(14-12-2011 14:03:32) Downloading 'vcredist_x86\vcredist_x86.exe' from 'http://go.microsoft.com/fwlink/?LinkID=177916&clcid=0x409' to 'C:\Users\JAGDISH\AppData\Local\Temp\VSD653B.tmp\' 
Download completed at 14-12-2011 14:05:00 
Verifying file integrity of C:\Users\JAGDISH\AppData\Local\Temp\VSD653B.tmp\vcredist_x86\vcredist_x86.exe 
WinVerifyTrust returned 0 
File trusted 
Running checks for package 'Visual C++ 2010 Runtime Libraries (x86)', phase BeforePackage 
Running MsiProductCheck with ProductCode '{196BB40D-1578-3D01-B289-BEFC77A11A1E}' 
MsiQueryProductState returned '-1' 
Setting value '-1 {int}' for property 'VCRedistInstalled' 
The following properties have been set for package 'Visual C++ 2010 Runtime Libraries (x86)': 
Property: [VCRedistInstalled] = -1 {int} 
Running checks for command 'vcredist_x86\vcredist_x86.exe' 
Result of running operator 'ValueGreaterThanEqualTo' on property 'VCRedistInstalled' and value '3': false 
Result of running operator 'ValueEqualTo' on property 'AdminUser' and value 'false': false 
Skipping FailIf because Property 'Version9X' was not defined 
Result of running operator 'VersionLessThan' on property 'VersionNT' and value '5.00': false 
Result of checks for command 'vcredist_x86\vcredist_x86.exe' is 'Install' 
'Visual C++ 2010 Runtime Libraries (x86)' RunCheck result: Install Needed 
Verifying file integrity of C:\Users\JAGDISH\AppData\Local\Temp\VSD653B.tmp\vcredist_x86\vcredist_x86.exe 
WinVerifyTrust returned 0 
File trusted 
Installing using command 'C:\Users\JAGDISH\AppData\Local\Temp\VSD653B.tmp\vcredist_x86\vcredist_x86.exe' and parameters ' /q:a ' 
Process exited with code 5100 
Status of package 'Visual C++ 2010 Runtime Libraries (x86)' after install is 'InstallFailed' 

答えて

0

定義済みの前提条件が非常に良いものではありませんが。それらがほとんど更新されないという事実もまた問題である。

したがって、最適な解決策は、独自のカスタム前提条件を作成することです。 Visual Studioセットアッププロジェクトは、カスタム前提条件の作成をサポートしていません。ただし、手動でrequired manifestsを生成することでこれを行うことができます。

これらのマニフェストはBootstrapper Manifest Generator toolで自動的に生成することができます。

パッケージマニフェストを生成した後、あなたはたとえば、Visual Studioの前提条件フォルダ内の別のフォルダに(パッケージを含む)すべてのこれらのファイルを追加することができます。

C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages 

この道をあなたが前提条件を選択することができますセットアッププロジェクトのプロパティページ。

カスタム前提条件は、元のランタイムとSP1の両方を検出できます。あなたはここにSP1検出基準を見つけることができます:http://blogs.msdn.com/b/astebner/archive/2010/05/05/10008146.aspx

+0

「検出基準」は正確には機能しないものです。誰かのインストーラーがそのマシンに接続し、msvcr100.dllをc:\ windows \ system32にコピーしました。それは簡単だから。 –

0

私はセットアッププロジェクトに私のC++ DLLの目標出力を追加することによってこの問題を解決することができました。私がこれをしたら、セットアッププロジェクトは自動的に適切なC++のDLLをインストーラにバンドルして、すべて正常に動作します。

元の問題は、私はセットアッププロジェクトの前提条件に「C++ランタイムライブラリ」を手動でチェックしていたという事実によって引き起こされました。

@Cosmin Pirvu - あなたの解決策はうまくいくかもしれませんが、これが私のやり方です。

関連する問題