C/C++ Yalıtılmış Uygulamalar ve Yan Yana Derlemeler ile İlgili Sorunları Giderme
C/C++ uygulama yükleme başarısız olabilir bağımlı kitaplıkları bulunamazsa.Bu makalede neden başarısız bir C/C++ uygulamayı yüklemek için bazı yaygın nedenler ve sorun giderme adımları önerir.
Bir uygulamayı yüklenmemesi bir yan yana derleme üzerinde bir bağımlılık belirten bir bildirim olduğundan ve derleme özel bir derleme yürütülebilir dosya ile aynı klasörde veya yerel Derleme Önbelleği ' %WINDIR%\WinSxS\ klasöründeki olarak yüklü değil, aşağıdaki hata iletileri biri, uygulamayı çalıştırmak deneyin Windows sürümüne bağlı olarak görüntülenebilir.
Uygulama düzgün şekilde başlatılamadı (0xc0000135).
Bu uygulama, uygulama yapılandırması yanlış olduğundan başlatmak başarısız oldu.Uygulamayı yeniden yüklemeyi, bu sorunu çözebilir.
Sistem belirtilen programı çalıştıramıyor.
Uygulamanızı hiçbir bildirim varsa ve Windows tipik arama konumlarda bulamıyor bir DLL bağlıdır, buna benzer bir hata iletisi görüntülenebilir:
- Bu uygulama başarısız oldu gerekli bir DLL bulunamadı.Uygulamanın yeniden yüklenmesi bu sorunu çözebilir.
Uygulamanızı Visual Studio yüklü olmayan bir bilgisayara dağıtıldığında ve önceki olanları benzer hata iletileri ile kilitlenmeleri, bunlardan denetleyin:
Açıklanan adımları Visual C++ Uygulaması Bağımlılıklarını Anlama.Bağımlılık walker bir uygulama veya DLL çoğu bağımlılıkları gösterebilirsiniz.Bazı DLL'leri eksik gözlemlerseniz, bunları, uygulamayı çalıştırmak çalıştığınız bilgisayarda yükleyin.
İşletim sistemi yükleyicisi uygulama bildirimi uygulamanın bağımlı bir derleme yüklemek için kullanır.Bildirim ikili bir kaynak olarak katıştırılmış veya uygulama klasöründe ayrı bir dosya olarak yüklü.Bildirim ikili katıştırılmış olup olmadığını denetlemek için ikili biçimde açık Visual Studio ve kaynakları listesinde için RT_MANIFEST bakın.Gömülü bir bildirim bulamazsa uygulama klasörü için < binary_name > gibi adlı bir dosya bakın. < uzantı > .manifest.
Uygulamanız üzerinde yan yana derlemeleri bağlıdır ve bir bildirim mevcut değil, bağlayıcı projeniz için bir bildirim oluşturur emin olmak sahip.Bağlayıcı seçeneği işaretleyin Oluştur bildirimi içinde Proje Özellikleri projesi için iletişim kutusu.
Bildirim ikili katıştırılmış varsa, kimliği RT_MANIFEST ikili bu tür için doğru olduğundan emin olun.Kullanmak için hangi kaynak kimliği hakkında daha fazla bilgi için bkz Using yan yana derlemeleri (Windows) kaynak olarak.Bildirim ayrı bir dosyaya, bir XML düzenleyicisini veya Metin Düzenleyicisi'ni açın.Bildirimler ve dağıtım için kuralları hakkında daha fazla bilgi için bkz bildirimlerini.
[!NOT]
Gömülü bir bildirim hem de ayrı bir bildirim dosyası varsa, işletim sistemi yükleyicisi katıştırılmış bildirimini kullanır ve ayrı bir dosya yok sayar.Ancak, Windows XP'de true tersidir — ayrı bildirim dosyası kullanılır ve katıştırılmış bildirim göz ardı edilir.
Bir DLL rağmen yüklendiğinde, dış bildirimleri yoksayıldığından bir bildirim içinde her DLL katıştırmak öneririz bir LoadLibrary çağırın.Daha fazla bilgi için derleme bildirimlerini.
Bildirimde numaralandırılır tüm derlemeleri doğru bilgisayarda yüklü olup olmadığını denetleyin.Her derleme adı, sürüm numarasını ve işlemci mimarisi tarafından bildiriminde belirtilen.Uygulamanız üzerinde yan yana derlemeleri bağlıysa, işletim sistemi yükleyici, bulabilmesi için bu derlemeleri doğru bilgisayarda açıklandığı gibi yüklü olup olmadığını denetleyin derleme arama sırası.64-bit derlemeleri 32-bit işlemlerinde yüklenemiyor ve 32-bit işletim sistemlerinde çalıştırılan unutmayın.
Örnek
Bir uygulama kullanılarak oluşturulmuş appl.exe, sahibiz varsayalım Visual C++.Uygulama bildirimi ya da appl.exe ikili kaynak kimliği eşit 1 veya ayrı bir dosya appl.exe.manifest depolanır, RT_MANIFEST olarak katıştırılmış.Bu bildirim içeriğini bu benzer:
<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>
İşletim sistemi yükleyicisi için bu bildirimi o appl.exe 32-bit x 86 için yerleşik Fabrikam.SxS.Library, sürüm 2.0.20121.0, adlandırılmış bir derleme bağımlı belirten İşlemci mimarisi.Bağımlı yan yana derleme paylaşılan bir derleme veya özel bir derleme olarak yüklenebilir.
Paylaşılan bir derleme için derleme bildirimi %WINDIR%\WinSxS\Manifests\ klasöründe yüklü.Derleme tanımlar ve içeriği listeler — diğer bir deyişle, derlemenin parçası olan DLL'leri:
<?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>
Yan yana derlemeleri de kullanabilir publisher yapılandırma dosyaları— ilke dosyaları olarak da bilinir — genel uygulamalar ve derlemeler aynı derleme başka bir sürümü yerine bir yan yana derleme bir sürümünü kullanmak için yönlendirme.Paylaşılan bir derleme %WINDIR%\WinSxS\Policies\ klasöründeki ilkeleri denetleyebilirsiniz.İşte bir örnek ilke dosyası:
<?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>
Bu ilke dosyası herhangi bir uygulama veya bu derlemenin 2.0.10000.0 sürümünü ister derleme yerine sürüm 2.0.20121.0, geçerli sürümü sistemde yüklü olduğu kullanması gerektiğini belirtir.Uygulama bildiriminde belirtilen derlemenin sürümü ilke dosyasında belirtilirse, yükleyici %WINDIR%\WinSxS\ klasöründeki bildiriminde belirtilen bu derlemedeki bir sürümünü arar ve bu sürümü yüklü değilse, yükleme başarısız olur.Ve derleme sürümünü 2.0.20121.0 yüklü değilse, yük 2.0.10000.0 derleme sürümü için sorun uygulamalar için başarısız olur.
Ancak, derleme yüklü uygulama klasöründe bir özel yan yana derleme olarak da yüklenebilir.Derleme paylaşılan bir derleme olarak bulmak işletim sistemi başarısız olursa, bunun için aşağıdaki sırada özel bir derleme olarak görünüyor:
Uygulama klasörü adı < assemblyName > .manifest sahip bir bildirim dosyası için denetleyin.Bu örnekte, yükleyici Fabrikam.SxS.Library.manifest appl.exe içeren klasöründe bulmayı dener.Bu bildirim bulunursa, yükleyicisi uygulama klasöründen derlemesi yükler.Derleme bulunamazsa, yükleme başarısız olur.
Açmaya \ < assemblyName > \ klasöründe appl.exe, içeren ve \ < assemblyName > \ yoksa, bu klasörden adı < assemblyName > .manifest sahip bir bildirim dosyası yüklemeye.Bildirim bulunursa, yükleyici derlemenin yükler \ < assemblyName > \ klasör.Derleme bulunamazsa, yükleme başarısız olur.
Nasıl yükleyiciyi bağımlı derlemeler için arama hakkında daha fazla bilgi için derleme arama sırası.Özel bir derleme olarak bağımlı bir derleme bulmak yükleyiciyi başarısız olursa, yükleme başarısız olur ve "Sistem belirtilen programı çalıştıramıyor" iletisi görüntülenir.Bu hatayı gidermek için emin olun bağımlı derlemeleri — ve bunları parçası olan DLL'leri — özel veya paylaşılan derlemeleri bilgisayarda yüklü.
Ayrıca bkz.
Kavramlar
Yalıtılmış Uygulama ve Yan Yana Derleme Kavramları
Diğer Kaynaklar
C/C++ Yalıtılmış Uygulamaları ve Yan Yana Derlemeleri Oluşturma