Poradce při potížích s C/C++, samostatný aplikací a sestavení vedle sebe
Načítání C/C++ aplikace může selhat, pokud nelze najít závislých knihoven.Tento článek popisuje některé běžné důvody, proč C/C++ aplikace nemůže načíst, a navrhuje kroky k řešení problémů.
Je-li v aplikaci se nepodařilo zavést, protože byl manifest, který určuje závislost na side-by-side sestavení a sestavení není nainstalována jako privátní sestavení ve stejné složce jako spustitelný soubor, ani v mezipaměti pro nativní sestavení ve složce %WINDIR%\WinSxS\, jednu z následujících chybových zpráv může být zobrazen, v závislosti na verzi systému Windows, ve kterém pokusu o spuštění aplikace.
Aplikace se nepodařilo správně inicializovat (0xc0000135).
Tato aplikace se nezdařilo spustit, protože konfigurace aplikace není správná.Potíže pravděpodobně odstraníte přeinstalováním aplikace.
Systém nemůže spustit zadaný program.
Pokud vaše aplikace má žádný manifest a závisí na knihovnu DLL, která systém Windows nemůže najít v typické umístění, pravděpodobně zobrazí chybová zpráva podobná následujícímu:
- Tato aplikace se nezdařilo spustit, protože požadovanou knihovnu DLL nebyl nalezen.Potíže pravděpodobně odstraníte opětovnou instalací aplikace.
Pokud vaše aplikace je nasazena v počítači, který nemá aplikaci Visual Studio a dojde k chybě s chybovými zprávami, které se podobají předchozím, zkontrolujte tyto věci:
Postupujte podle pokynů, které jsou popsány v Vysvětlení závislostí aplikace Visual C++.Dependency walker můžete zobrazit většinu závislosti aplikace nebo knihovna DLL.Pokud zjištěné chybí některé soubory DLL nainstalujte v počítači, na kterém se pokoušíte spustit aplikaci.
Zavaděč operačního systému používá manifest aplikace načíst sestavení, na kterých aplikace závisí.Manifest můžete být vložena do binárního souboru jako zdroj nebo nainstalován jako samostatný soubor ve složce aplikace.Chcete-li zkontrolovat, zda je manifest vložený do binárního souboru, otevřete binární v Visual Studio a vyhledejte RT_MANIFEST určeného v seznamu zdrojů.Pokud nemůžete najít vložený manifest, vyhledejte ve složce aplikace pro soubor, který má vypadat jako <binary_name>. <extension> .manifest.
Pokud vaše aplikace závisí na side-by-side sestavení a manifestu není k dispozici, budete muset zajistit, aby propojovací program generuje manifest pro váš projekt.Kontrola možností propojovacího programu Generovat manifest v Vlastnosti projektu dialogové okno pro projekt.
Manifest je vložen do binárního souboru, ujistěte se, správnost ID RT_MANIFEST určeného pro tento typ binárního souboru.Další informace o ID zdroje, které použití, viz použití Side-by-Side sestavení jako prostředek (Windows).Je-li manifest v samostatném souboru, otevřete jej v textovém editoru nebo editoru XML.Další informace o manifestech a pravidla pro nasazení naleznete v tématu manifesty.
[!POZNÁMKA]
Pokud je přítomen vložený manifest i samostatný soubor manifestu, zavaděč operačního systému používá vložený manifest a ignoruje samostatný soubor.Však v systému Windows XP, opak je pravdou – použít samostatný soubor manifestu a ignorovat vložený manifest.
Doporučujeme Vložit manifest v každé knihovně DLL, protože externí manifestů jsou ignorovány, při načtení knihovny DLL však LoadLibrary volání.Další informace naleznete v tématu manifesty sestavení.
Zkontrolujte, zda jsou všechna sestavení, které jsou vyjmenovány v manifestu správně nainstalovány v počítači.Každé sestavení je určen v manifestu jeho název, číslo verze a architekturu procesoru.Pokud vaše aplikace závisí na side-by-side sestavení, kontrola, tyto sestavení správně nainstalovány v počítači, aby zavaděč operačního systému lze najít, jak je popsáno v Pořadí hledání sestavení.Mějte na paměti, že 64bitové sestavení nelze načíst v 32bitové a nemohou být provedeny na 32bitové operační systémy.
Příklad
Předpokládat, máme aplikaci, appl.exe, která je sestavena pomocí Visual C++.Manifest aplikace je vložené přímo do appl.exe jako binárních prostředků RT_MANIFEST určeného ID je rovno 1, nebo je uložen jako samostatný soubor appl.exe.manifest.Obsah tohoto manifestu vypadá takto:
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Fabrikam.SxS.Library" version="2.0.20121.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3e"></assemblyIdentity>
</dependentAssembly>
</dependency>
</assembly>
Pro zavaděč operačního systému tento manifest tvrdí, že tento appl.exe závisí na sestavení s názvem Fabrikam.SxS.Library, verze 2.0.20121.0, který je sestaven pro architekturu 32bitové x 86 procesoru.Závislé sestavení side-by-side lze nainstalovat jako sdílené sestavení nebo jako privátní sestavení.
Manifest sestavení pro sdílené sestavení je nainstalován ve složce %WINDIR%\WinSxS\Manifests\.Určuje sestavení a obsahuje seznam jeho obsah – to znamená, že knihovny DLL, které jsou součástí sestavení:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<noInheritable/>
<assemblyIdentity type="win32" name="Fabrikam.SxS.Library" version="2.0.20121.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3e"/>
<file name="Fabrikam.Main.dll" hash="3ca5156e8212449db6c622c3d10f37d9adb1ab12" hashalg="SHA1"/>
<file name="Fabrikam.Helper.dll" hash="92cf8a9bb066aea821d324ca4695c69e55b2d1c2" hashalg="SHA1"/>
</assembly>
Side-by-side sestavení lze rovněž použít konfigurační soubory aplikace publisher, nazývané také soubory zásad – globálně přesměrování aplikace a sestavení použít jednu verzi side-by-side sestavení namísto jinou verzí stejného sestavení.Zásady můžete vyhledat sdílené sestavení ve složce %WINDIR%\WinSxS\Policies\.Zde je příklad souboru zásad:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity type="win32-policy" name="policy.2.0.Fabrikam.SxS.Library" version="2.0.20121.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3e"/>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Fabrikam.SxS.Library" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3e"/>
<bindingRedirect oldVersion="2.0.10000.0-2.0.20120.99" newVersion="2.0.20121.0"/>
</dependentAssembly>
</dependency>
</assembly>
Tento soubor zásad určuje, že všechny aplikace nebo sestavení, která požádá o 2.0.10000.0 verzi tohoto sestavení místo toho použijte verze 2.0.20121.0, která je aktuální verze, která je nainstalována v systému.Je-li verzi sestavení, která je uvedena v manifestu aplikace je určena v souboru zásad, zavaděč hledá verzi tohoto sestavení, která je určena v manifestu ve složce %WINDIR%\WinSxS\ a pokud není nainstalována tato verze, se nezdaří načtení.A pokud není nainstalována verze sestavení 2.0.20121.0, zatížení selže aplikace, které se dotázat na verzi sestavení 2.0.10000.0.
Sestavení lze však také nainstalovat jako soukromé side-by-side sestavení ve složce nainstalovaných aplikací.Je-li operační systém se nepodařilo najít sestavení jako sdílená sestavení, hledá jej jako privátní sestavení, v následujícím pořadí:
Zkontrolujte složku aplikace pro soubor manifestu, který má název <assemblyName> .manifest.V tomto příkladu zavaděč se pokouší o nalezení Fabrikam.SxS.Library.manifest ve složce, která obsahuje appl.exe.Pokud najde manifest, načte zavaděč sestavení ze složky aplikace.Pokud sestavení není nalezen, dojde k selhání zatížení.
Zkuste otevřít \ <assemblyName> \ složky ve složce, která obsahuje appl.exe, a v případě \ <assemblyName> \ existuje, zkuste načíst soubor manifestu, který má název <assemblyName> .manifest z této složky.Pokud je nalezen manifest, zavaděč načte sestavení z \ <assemblyName> \ složky.Pokud sestavení není nalezen, dojde k selhání zatížení.
Další informace o jak zavaděč hledá závislé sestavení, viz Pořadí hledání sestavení.Pokud zavaděč nepodaří najít závislé sestavení jako privátní sestavení, zatížení selže a zobrazí se zpráva "systém nemůže spustit tento program".Chcete-li tuto chybu vyřešit, ujistěte se, že závislé sestavení – a knihovny DLL, které jsou součástí jejich – jsou nainstalovány v počítači, jako soukromý nebo sdílená sestavení.
Viz také
Koncepty
Koncepty izolovaných aplikací a sestav vedle sebe