我用C#和SQLite編寫了Windows應用程序。在PC應用程序上安裝Microsoft Visual C++ 2010 Redistributable Package x86時,運行正確,但如果未安裝Microsoft Visual C++ 2010 Redistributable Package x86,則應用程序無法運行。爲什麼?
SQLite是否依賴於Microsoft Visual C++ 2010 Redistributable Package x86?爲什麼要安裝Microsoft Visual C++ 2010 Redistributable Package x86以使用SQLite?
回答
SQLite的版本是由VS2010編譯的,它依賴於C運行時庫,因此它需要Visual C++ 2010 Redistributable Package x86。
是的。 SQLite可能是用C++編寫的。它使用/ MD選項編譯,這意味着它在運行時需要msvcrt#.dlls。分發包安裝這個沒有它它不能運行
這是說,不指定/ MD意味着庫不需要msvcrt#.dll(s)?從文檔看來,所有可用的值都以某種方式使用運行時庫。你能澄清嗎? –
如果使用/ MT而不是/ MD編譯C或C++程序,那麼它們不需要運行時,因爲它們使用編譯到代碼中的靜態庫。 – user93353
SQLite依賴於Visual C++運行時,但你不需要需要安裝它在客戶端機器上。 system.data.sqlite下載頁面包含幾個已包含運行時的「靜態」包。
所有「靜態」程序包都包含靜態鏈接到適當版本的Visual C++運行時的本機或混合模式程序集二進制文件。通常,這些軟件包用於客戶機器可能沒有安裝所需版本的Visual C++運行時並且由於特權有限而無法安裝的情況。
例如,我的機器上我運行Windows 8.1 x64的,所以我下預編譯靜態鏈接的二進制文件去了64位Windows(.NET Framework 4.0中)和下載的sqlite-netFx40靜態二進制-x64-2010-1.0.90.0.zip。
此二進制包包含System.Data.SQLite 1.0.90.0(3.8.2)包的x64版本的所有二進制文件。用於x64的Visual C++ 2010 SP1運行時是靜態鏈接的。 .NET Framework 4.0是必需的。
然後解壓縮包並運行test.exe以確保一切正常。需要零安裝。
問題是你必須確保下載正確的軟件包。很難知道您擁有哪個軟件包/ DLL,如果您只是從開發人員或公司使用的文件共享中獲得它,直到您嘗試運行正在使用的應用程序爲止。對於我所需要的SQLite.Interop.dll程序集,它是必需的 - 沒有C++可再發行組件,它給我錯誤,程序集找不到。安裝後,錯誤消失了,它工作正常。 – vapcguy
由於明顯的SQLite開發的C++的SQLite.Interop.dll,因爲他們這樣說:
(11)爲什麼我得到一個DllNotFoundException(對於 「sqlite3.dll」 或「SQLite.Interop .dll「)當試圖運行我的應用程序?
無法找到指定的動態鏈接庫(DLL),或者由於缺少依賴關係而無法裝入指定的動態鏈接庫(DLL)。確保指定的動態鏈接庫位於應用程序目錄或系統PATH中的目錄中,然後重試。 另外,除非使用靜態鏈接到動態鏈接庫的動態鏈接庫,否則必須安裝必要的Visual C++運行時可再發行組件。
強調我的最後一部分。您需要來自system.data.sqlite download page的靜態二進制文件,以便不需要C++運行庫。在同一頁上提供二進制文件的地方,那些需要它的人會告訴你它是 - 例如,4.0的Visual C++ 2010 SP1運行時需要4.0,而.NET 4.5需要更新4,根據頁面。我已經使用了2015版本,Update 3和.NET 4.0版本,沒有任何問題。
注意 - 您可能沒有意識到,但如果您嘗試託管在文件共享中使用SQLite DLL的應用程序,並通過網絡從工作站連接到該應用程序,該工作站仍然需要C++運行時,因爲它正在內存中運行應用程序。
參考:http://system.data.sqlite.org/index.html/doc/trunk/www/faq.wiki#q11
鏈接到微軟的Visual C++ 2015年可再發行組件更新3,我知道有64位,.NET 4.0版本SQLite的二進制文件的工作: https://www.microsoft.com/en-us/download/details.aspx?id=53840
- 1. visual C++ 2010 redistributable
- 2. Wix Toolset安裝C++ 2010 Redistributable
- 3. Microsoft 2010 visual c,安裝FLTK
- 4. 什麼樣的安裝程序使用Microsoft安裝Visual Studio 2010
- 5. 當在Windows Server 2003上安裝Microsoft Visual C++ 2010 Redistributable時發生msvcrt.dll問題
- 6. MySql Workbench安裝程序需要安裝Visual C++ 2015 Redistributable Package,但它已經安裝了
- 7. Visual C++ redistributable redistribution
- 8. Visual Studio爲什麼要嘗試安裝到Program Files(x86)?
- 9. 什麼是Microsoft SQL服務器,爲什麼需要安裝它?
- 10. 如何安裝Microsoft Spec#2010
- 11. 使用Visual C++ Redistributable安裝每個用戶的WiX安裝程序
- 12. 我是否需要爲我的PowerPoint插件安裝適用於Office Runtime(x86和x64)的Microsoft Visual Studio 2010工具?
- 13. Wx工具集安裝vC++ redistributable(x86)2015太慢
- 14. 爲什麼需要在Visual Studio 2010中修改X86平臺
- 15. 無提示安裝Visual C++ Redistributable for PowerShell中的Visual Studio 2012
- 16. 爲什麼不能安裝vcredist_x86.exe安裝?
- 17. 如何爲Visual Studio 2010安裝Guidance Package模板?
- 18. 安裝Microsoft Visual Studio Professional 2010時出錯
- 19. 可以在Microsoft的Visual C++ 2010 Express Edition中安裝Whole Tomato的Visual Assist X嗎?
- 20. System.Data.Sqlite - 未能安裝Microsoft Visual C++運行時
- 21. 如何使用我的Visual Studio安裝程序項目打包Microsoft Visual C++ 2010 SP1
- 22. 無法卸載VC++ 2010:錯誤:在計算機上檢測到新版本的Microsoft Visual C++ 2010 Redistributable
- 23. 使用visual studio 2012安裝軟件並安裝屏蔽2010
- 24. ,爲什麼我會在Microsoft Visual C此消息++ 2010速成
- 25. visualite c#2010 SQLite安裝問題
- 26. VS2010安裝。我全都要。我應該安裝什麼?
- 27. Visual Studio 2010 SP1安裝項目不會安裝Visual C++ 2010運行時庫的SP1
- 28. 錯誤:計算機上檢測到較新版本的Microsoft Visual C++ 2010 Redistributable
- 29. 通過pip安裝lxml時出錯:需要Microsoft Visual C++ 14.0
- 30. 未能通過Visual Studio 2010中的Nuget/Package Manager安裝umbraco 7.5.4
* * Microsoft Visual C++ 2010 Redistributable Package x86 **與.Net版本4一起安裝? –
我不知道。但我想.NET包不包含C運行時庫 – Matt
是的,.NET不包含C++可再發行組件包。這完全是另一回事。 .NET Framework編譯用.NET編寫的代碼。 C++可再發行組件是一個「運行時」,這意味着它需要編譯代碼並運行它 - 就像Java具有JRE一樣。 .NET代碼之前有C++代碼。 – vapcguy