Sdílet prostřednictvím


Řešení potíží s izolovanými aplikacemi C/C++ a souběžnými sestaveními

Načítání C/C++ aplikace může selhat, pokud závislé knihovny nelze nalézt.Tento článek popisuje několik běžných příčin, proč se nepodařilo načíst, aplikace C/C++ a navrhuje kroky k řešení problémů.

Pokud aplikace se nepodařilo načíst, protože má manifest, který určuje závislost na vedle sebe sestavení a sestavení není nainstalována jako privátní sestavení ve stejné složce jako spustitelný soubor ani v mezipaměti nativní sestavení ve složce %WINDIR%\WinSxS\, jeden z následujících chybových zpráv může být zobrazen, v závislosti na verzi systému Windows, na kterém je pokusíte spustit aplikaci.

  • Aplikace se neinicializovala správně (0xc0000135).

  • Tuto aplikaci se nepodařilo spustit, protože se jedná o nesprávnou konfiguraci aplikace.Tyto potíže mohou vyřešit opětovnou instalací aplikace.

  • Systém nemůže spustit zadaný program.

Pokud vaše aplikace nemá žádný manifest a závisí na knihovny DLL, která systému Windows nemůže najít v umístění pro typická vyhledávání, může být zobrazen chybovou zprávu, která se podobá následujícímu:

  • Tuto aplikaci se nepodařilo spustit, protože požadovanou knihovnu DLL nebyl nalezen.Tyto potíže mohou vyřešit opětovné instalace aplikace.

Pokud vaše aplikace je nasazena v počítači, který není zaškrtnuta možnost sady Visual Studio a dojde k chybě, a s chybovými zprávami, které vypadat podobně jako s předchozími názvy, zkontrolujte tyto kroky:

  1. Postupujte podle pokynů, které jsou popsány v Vysvětlení závislostí aplikace Visual C++.Walkera závislostí můžete zobrazit většina závislosti ke spuštění aplikace nebo knihovny DLL.Pokud zjistíte, že chybí některé soubory DLL, nainstalujte je v počítači, na kterou se pokoušíte spouštění aplikací.

  2. Zavaděč operačního systému používá k načtení sestavení, která je aplikace závislá na manifest aplikace.Manifest můžete být vložena do binárního souboru jako prostředek, nebo nainstalovat jako samostatný soubor ve složce aplikace.Chcete-li zkontrolovat, zda manifestu je vložen do binárního souboru, otevřete binary v Visual Studio a vyhledejte RT_MANIFEST ve svém seznamu prostředků.Pokud nelze nalézt vložený manifest, vyhledejte ve složce aplikace soubor s názvem podobným tomuto: <název_souboru>.<přípona>.manifest.

  3. Pokud vaše aplikace závisí na sestavení, které vedle sebe a manifestu není přítomen, je nutné zajistit, že propojovací program generuje manifest pro váš projekt.Zaškrtněte možnost propojovacího programu Generovat manifest v Vlastnosti projektu dialogového okna pro projekt.

  4. Pokud manifestu je vložen do binárního souboru, zkontrolujte, zda je pro tento typ binárního souboru správné ID RT_MANIFEST.Další informace o jaké ID prostředku používat, naleznete v části Using vedle sebe sestavení jako prostředek (Windows).Je-li manifest v samostatném souboru, otevřete ho v editoru XML nebo v textovém editoru.Další informace o manifesty a pravidla pro nasazení, naleznete v části manifesty.

    [!POZNÁMKA]

    Je-li vložený manifest a samostatný soubor manifestu jsou k dispozici, zavaděč operačního systému použije vložený manifest a ignoruje samostatný soubor.V systému Windows XP, je však opak true – se používá v samostatném souboru manifestu a vložený manifest je ignorována.

  5. Doporučujeme, abyste Vložit manifest v každém DLL, protože externí manifestů jsou ignorovány, pokud je však načíst knihovnu DLL LoadLibrary volání.Další informace naleznete v tématu manifesty sestavení.

  6. Zkontrolujte, zda jsou všechna sestavení, která se nachází v manifestu správně nainstalovány v počítači.Každé sestavení je určen v manifestu jeho název, číslu verze a architektura procesoru.Pokud je aplikace závislá na sestavení, které vedle sebe, zkontrolujte, zda tyto sestavení jsou správně nainstalovány v počítači, aby zavaděč operačního systému lze najít, jak je popsáno v Sekvence hledání sestavení.Nezapomeňte, že 64bitových sestavení nelze načíst v 32-bit procesy a nelze provést v operačních systémech 32 bitů.

Příklad

Předpokládat, že máte aplikaci appl.exe, která je integrována s použitím Visual C++.Manifest aplikace buď je vložen do appl.exe jako binárních prostředků RT_MANIFEST ID se rovná 1, nebo se ukládají 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>

K zavaděč operačního systému tohoto manifestu říká, že appl.exe závisí na sestavení s názvem Fabrikam.SxS.Library, verze 2.0.20121.0, který je součástí pro architekturu x 86 32-bit architekturu procesoru.Závislé sestavení vedle sebe 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\.Identifikuje sestavení a zobrazí jeho obsah, který je knihoven 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>

Můžete také použít vedle sebe sestavení Vydavatel konfigurační soubory– také označována jako soubory zásad – globálně přesměrovat aplikace a sestavení používat jednu verzi sestavení vedle sebe namísto jiná verze stejného sestavení.Můžete zkontrolovat zásady pro sdílené sestavení ve složce %WINDIR%\WinSxS\Policies\.Tady 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 jakékoli aplikace nebo sestavení, které požádá o verzi 2.0.10000.0 toto sestavení místo toho použijte verze 2.0.20121.0, která je aktuální verze, která je nainstalována v systému.Pokud verzi sestavení, ve kterém je uveden v manifestu aplikace je zadán v souboru zásad, zavaděč hledá verze tohoto sestavení, která je zadána v manifestu ve složce %WINDIR%\WinSxS\ a pokud není nainstalována tato verze, se nezdaří zatížení.A pokud není nainstalovaná verze sestavení 2.0.20121.0, se nezdaří zatížení pro aplikace, které požádat o verzi sestavení 2.0.10000.0.

Nicméně sestavení lze také nainstalovat jako privátní sestavení vedle sebe ve složce nainstalované aplikace.Pokud v operačním systému se nepodařilo najít sestavení jako sdílené sestavení, hledá jej jako privátní sestavení, v tomto pořadí:

  1. Ověřte, zda se ve složce aplikace nachází soubor manifestu s názvem <assemblyName>.manifest.V tomto příkladu zavaděč pokusí se najít Fabrikam.SxS.Library.manifest ve složce, který obsahuje appl.exe.Pokud najde manifestu, načte zavaděč sestavení ve složce aplikace.Pokud není nalezena sestavení, načte nezdaří.

  2. Pokuste se otevřít složku \<assemblyName>\ ve složce, která obsahuje soubor appl.exe, a pokud složka \<assemblyName>\ existuje, načtěte z této složky soubor manifestu s názvem <assemblyName>.manifest.Pokud je manifest nalezen, zavaděč načte sestavení ze složky \<assemblyName>\.Pokud není nalezena sestavení, načte nezdaří.

Další informace o způsobu zavaděč vyhledává závislé sestavení, naleznete v části Sekvence hledání sestavení.Pokud zavaděč nemůže najít závislé sestavení jako privátní sestavení, zatížení nezdaří a zobrazí se zpráva "systém nemůže spustit zadaný program".Pro vyřešení této chyby, 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

Koncept izolovaných aplikací a souběžných sestavení

Další zdroje

Sestavení izolovaných aplikací C/C++ a souběžných sestavení