Browse Source

配置-VCC环境(执行逻辑已经注释),添加VCC环境Dll,防止部分电脑使用不了静默安装(vcruntime140.dll)

liyijie 1 year ago
parent
commit
7265e1c80a
24 changed files with 187 additions and 68 deletions
  1. BIN
      PDFReaderPro_Installer/Bin/DuiLib.dll
  2. BIN
      PDFReaderPro_Installer/Bin/PDFReaderPro_Insrtaller.exe
  3. BIN
      PDFReaderPro_Installer/Bin/PDFReaderPro_Insrtaller.pdb
  4. BIN
      PDFReaderPro_Installer/Bin/vcruntime140.dll
  5. BIN
      PDFReaderPro_Installer/Lib/DuiLib.exp
  6. BIN
      PDFReaderPro_Installer/Lib/DuiLib.lib
  7. BIN
      PDFReaderPro_Installer/Lib/DuiLib_d.exp
  8. BIN
      PDFReaderPro_Installer/Lib/DuiLib_d.lib
  9. 81 65
      PDFReaderPro_Installer/PDFReaderPro_Insrtaller/CCmd.cpp
  10. 1 0
      PDFReaderPro_Installer/PDFReaderPro_Insrtaller/CCmd.h
  11. 1 1
      PDFReaderPro_Installer/PDFReaderPro_Insrtaller/CMainPage.h
  12. 21 2
      PDFReaderPro_Installer/PDFReaderPro_Insrtaller/ComparVersion.cpp
  13. 9 0
      PDFReaderPro_Installer/PDFReaderPro_Insrtaller/ComparVersion.h
  14. 35 0
      PDFReaderPro_Installer/PDFReaderPro_Insrtaller/DeviceProduct.cpp
  15. 7 0
      PDFReaderPro_Installer/PDFReaderPro_Insrtaller/DeviceProduct.h
  16. 4 0
      PDFReaderPro_Installer/PDFReaderPro_Insrtaller/FileCore.cpp
  17. 2 0
      PDFReaderPro_Installer/PDFReaderPro_Insrtaller/KeyVar.cpp
  18. 4 0
      PDFReaderPro_Installer/PDFReaderPro_Insrtaller/KeyVar.h
  19. 9 0
      PDFReaderPro_Installer/PDFReaderPro_Insrtaller/PDFReaderPro_Insrtaller.vcxproj
  20. 6 0
      PDFReaderPro_Installer/PDFReaderPro_Insrtaller/PDFReaderPro_Insrtaller.vcxproj.filters
  21. 1 0
      PDFReaderPro_Installer/PDFReaderPro_Insrtaller/WndInstall.cpp
  22. 6 0
      PDFReaderPro_Installer/PDFReaderPro_Insrtaller/WndInstalling.cpp
  23. BIN
      PDFReaderPro_Installer/PDFReaderPro_Insrtaller/curl/x64/bin/vcruntime140.dll
  24. BIN
      PDFReaderPro_Installer/PDFReaderPro_Insrtaller/curl/x86/bin/vcruntime140.dll

BIN
PDFReaderPro_Installer/Bin/DuiLib.dll


BIN
PDFReaderPro_Installer/Bin/PDFReaderPro_Insrtaller.exe


BIN
PDFReaderPro_Installer/Bin/PDFReaderPro_Insrtaller.pdb


BIN
PDFReaderPro_Installer/Bin/vcruntime140.dll


BIN
PDFReaderPro_Installer/Lib/DuiLib.exp


BIN
PDFReaderPro_Installer/Lib/DuiLib.lib


BIN
PDFReaderPro_Installer/Lib/DuiLib_d.exp


BIN
PDFReaderPro_Installer/Lib/DuiLib_d.lib


+ 81 - 65
PDFReaderPro_Installer/PDFReaderPro_Insrtaller/CCmd.cpp

@@ -14,7 +14,7 @@
 
 CCmd::CCmd()
 {
-	
+
 }
 
 BOOL CCmd::Installcmd()
@@ -52,7 +52,7 @@ BOOL CCmd::InstallNetcmd()
 	if (systemLetter == L"")
 	{
 		systemLetter = L"C";
-		
+
 	}
 
 	//安装NET Framework工具所在路径是固定的
@@ -67,106 +67,122 @@ BOOL CCmd::InstallNetcmd()
 
 	std::wstring cmd = L"";
 	//cmd = L"dism /online /enable-feature /featurename:IIS-ASPNET45 /all";//win8需要启动ASPNET4.5服务,目前暂时没用到;
-	
+
 	//检测当前系统为win8或更高版本
 	if (IsWindows8OrGreater())
 	{
 		cmd = L"/k " + systemLetter + L": & cd " + netframe + L" & aspnet_regiis.exe -i /qb /qn";
-		
-		std::map<wstring, wstring> map{ {L"InstallNetFramwork", cmd}, { L"WindowsVersion", L"Win8,10.."}};
+
+		std::map<wstring, wstring> map{ {L"InstallNetFramwork", cmd}, { L"WindowsVersion", L"Win8,10.." }};
 		LogIni::GetLogToIniMaps(map);
 		m_IsWin8InstallNet = true;
 	}
 	else
 	{
 		cmd = L"/k " + systemLetter + L": & cd " + netframe + L" & aspnet_regiis.exe -i /qb /qn";
-		
-		std::map<wstring, wstring> map{ {L"InstallNetFramwork", cmd}, { L"WindowsVersion", L"Win7"} };
+
+		std::map<wstring, wstring> map{ {L"InstallNetFramwork", cmd}, { L"WindowsVersion", L"Win7" } };
 		LogIni::GetLogToIniMaps(map);
 	}
-	
+
 	TCHAR* tc = (TCHAR*)(&cmd[0]);
 	return Executecmd(tc);
 }
 
+BOOL CCmd::InstallVcPlusPluscmd() {
+	std::wstring cmd = L"";
+	wchar_t downloadsPath[MAX_PATH];
+	DWORD bufferSize = ::GetEnvironmentVariable(L"USERPROFILE", downloadsPath, MAX_PATH);
+	std::wstring wstrPath_Install(downloadsPath);
+	wstrPath_Install += L"\\Downloads";
+	//防止目标路径与当前进程所在盘符不一致,所以在cd之前,要指定目标路径的盘符cdDisk
+	auto cdDisk = wstrPath_Install.substr(0, 1) + L": & ";
+	cmd = L"/k " + cdDisk + L"cd \"" + wstrPath_Install + L"\"" + L" & curl -o vc_redist.x64.exe https://download.visualstudio.microsoft.com/download/pr/eaab1f82-787d-4fd7-8c73-f782341a0c63/917C37D816488545B70AFFD77D6E486E4DD27E2ECE63F6BBAAF486B178B2B888/VC_redist.x64.exe && start /wait vc_redist.x64.exe /install /quiet /norestart && del vc_redist.x64.exe";
+
+	//LogIni::GetLogToIni("Install cmd", cmd);
+	TCHAR* tc = (TCHAR*)(&cmd[0]);
+	return Executecmd(tc);
+
+}
+
 BOOL CCmd::OpenAppcmd()
 {
 	//Todo:目前不使用该函数
 	std::wstring cmd = L"";
 
-		auto cdDisk = PathCore::smPath_Install.substr(0, 1) + L": & ";
+	auto cdDisk = PathCore::smPath_Install.substr(0, 1) + L": & ";
 
-		cmd = L"/k " + cdDisk + L"cd \"" + PathCore::smPath_Install + L"\"" + L" & start/wait " + Product::smName_Application;
+	cmd = L"/k " + cdDisk + L"cd \"" + PathCore::smPath_Install + L"\"" + L" & start/wait " + Product::smName_Application;
 
-    LogIni::GetLogToIni("Start App cmd", cmd);
+	LogIni::GetLogToIni("Start App cmd", cmd);
 	TCHAR* tc = (TCHAR*)(&cmd[0]);
-   return Executecmd(tc);
+	return Executecmd(tc);
 }
 
-BOOL CCmd::Executecmd(TCHAR pszCmdLine[],bool isVBA)
+BOOL CCmd::Executecmd(TCHAR pszCmdLine[], bool isVBA)
 {
-		char Buffer[4096];
-		STARTUPINFO sInfo;//新进程的主窗口特性
-		PROCESS_INFORMATION pInfo;
-		SECURITY_ATTRIBUTES sa;
-		HANDLE hRead, hWrite;
-		DWORD bytesRead;    //读取代码的长度
-		sa.nLength = sizeof(SECURITY_ATTRIBUTES); //结构体的大小,可用SIZEOF取得
-		sa.lpSecurityDescriptor = NULL;//安全描述符
-		sa.bInheritHandle = TRUE;; //安全描述的对象能否被新创建ÆÆ的进程继承
-
-		if (!CreatePipe(&hRead, &hWrite, &sa, 0)) 
-		{
-			return GetLastError();
-		}
+	char Buffer[4096];
+	STARTUPINFO sInfo;//新进程的主窗口特性
+	PROCESS_INFORMATION pInfo;
+	SECURITY_ATTRIBUTES sa;
+	HANDLE hRead, hWrite;
+	DWORD bytesRead;    //读取代码的长度
+	sa.nLength = sizeof(SECURITY_ATTRIBUTES); //结构体的大小,可用SIZEOF取得
+	sa.lpSecurityDescriptor = NULL;//安全描述符
+	sa.bInheritHandle = TRUE;; //安全描述的对象能否被新创建ÆÆ的进程继承
+
+	if (!CreatePipe(&hRead, &hWrite, &sa, 0))
+	{
+		return GetLastError();
+	}
+
+	GetStartupInfo(&sInfo);
+	sInfo.cb = sizeof(sInfo);
+	sInfo.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
+	sInfo.wShowWindow = SW_HIDE;
+	sInfo.hStdError = hWrite;   //将管道的写端交给子进程
+	sInfo.hStdOutput = hWrite;
+	memset(&pInfo, 0, sizeof(pInfo));
+	wstring cmdPath = L"";
+	if (isVBA == false)
+	{
+		cmdPath = L"c:\\windows\\system32\\cmd.exe";
+	}
+	else
+	{
+		wstring Installpath = PathCore::smPath_Install + L"\\install.bat";
+		cmdPath = Installpath;
+	}
+	if (!CreateProcessW(cmdPath.c_str(), pszCmdLine, NULL, NULL, TRUE, 0, NULL, NULL, &sInfo, &pInfo))
+	{
+		CloseHandle(hWrite);
+		CloseHandle(hRead);
+		return GetLastError();
+	}
 
-		GetStartupInfo(&sInfo);
-		sInfo.cb = sizeof(sInfo);
-		sInfo.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
-		sInfo.wShowWindow = SW_HIDE;
-		sInfo.hStdError = hWrite;   //将管道的写端交给子进程
-		sInfo.hStdOutput = hWrite;
-		memset(&pInfo, 0, sizeof(pInfo));
-		wstring cmdPath = L"";
-		if(isVBA == false)
+
+	for (int i = 0;; ++i)
+	{
+		//执行cmd结束之后,则读取文件结束
+		if (!ReadFile(hRead, Buffer, sizeof(Buffer) - 1, &bytesRead, NULL))
 		{
-		 cmdPath = L"c:\\windows\\system32\\cmd.exe";
+			break;
+			Buffer[bytesRead] = 0;
 		}
 		else
 		{
-			wstring Installpath = PathCore::smPath_Install + L"\\install.bat";
-			cmdPath = Installpath;
-		}
-		if (!CreateProcessW(cmdPath.c_str(), pszCmdLine, NULL, NULL, TRUE, 0, NULL, NULL, &sInfo, &pInfo))
-		{
+			WaitForSingleObject(pInfo.hProcess, 1000);
 			CloseHandle(hWrite);
 			CloseHandle(hRead);
-			return GetLastError();
+			return TRUE;
 		}
 
 
-		for (int i = 0;; ++i)
-		{
-			//执行cmd结束之后,则读取文件结束
-			if (!ReadFile(hRead, Buffer, sizeof(Buffer) - 1, &bytesRead, NULL))
-			{
-				break;
-				Buffer[bytesRead] = 0;
-			}
-			else
-			{
-				WaitForSingleObject(pInfo.hProcess, 1000);
-				CloseHandle(hWrite);
-				CloseHandle(hRead);
-				return TRUE;
-			}
-
-
-		}
+	}
 
-		CloseHandle(hWrite);
-		CloseHandle(hRead);
-		return TRUE;
+	CloseHandle(hWrite);
+	CloseHandle(hRead);
+	return TRUE;
 
 }
 
@@ -177,7 +193,7 @@ BOOL CCmd::Executecmd(TCHAR pszCmdLine[],bool isVBA)
 //因时间有限,暂时不进行排查修复UTF-16的vba脚本执行没反应的问题
 bool CCmd::GetVBA_UTF16()
 {
-	
+
 	std::wstring cmdd = L"";
 	std::wstring echoc = L"ECHO.";
 	//vba脚本内容

+ 1 - 0
PDFReaderPro_Installer/PDFReaderPro_Insrtaller/CCmd.h

@@ -26,5 +26,6 @@ public:
 	 bool GetVBA_UTF8();
 	 bool GetVBA_UTF16();
 	 BOOL InstallNetcmd();
+	 BOOL InstallVcPlusPluscmd();
 };
 

+ 1 - 1
PDFReaderPro_Installer/PDFReaderPro_Insrtaller/CMainPage.h

@@ -49,5 +49,5 @@ public:
 	enum class VertionResultType m_VertionResultType = VertionResultType::None;
 	enum class InstallStateType m_InstallStateType = InstallStateType::None;
 	enum class InstallNetFrameworkType m_NetFrameworkType = InstallNetFrameworkType::None;
-
+	enum class InstallVCPlusPlusType m_VcPlusPlusType = InstallVCPlusPlusType::None;
 }CurrentState;

+ 21 - 2
PDFReaderPro_Installer/PDFReaderPro_Insrtaller/ComparVersion.cpp

@@ -14,7 +14,10 @@ VertionResultType ComparVersion::GetProductInfo(wstring productName,wstring prod
 	{
 		NetFramework = InstallNetFrameworkType::V40_46;
 	}
-
+	int vc = GetCompareVCPlusPlus(deviceProduct.GetVsCPulsPulsVersion());
+	if (vc == 1) {
+		VcPlusPlus = InstallVCPlusPlusType::V14_3;
+	}
 	return GetCompareVersion(deviceProduct.GetVersion(), onlineProduct.GetVersionW());
 }
 VertionResultType ComparVersion::GetCompareVersion(wstring deviceVersion,wstring onlineVersion)
@@ -70,4 +73,20 @@ int ComparVersion::GetCompareNETFramework(wstring minVersion, wstring maxVersion
 		return 1;
 
 	return 0;
-}
+}
+
+
+int ComparVersion::GetCompareVCPlusPlus(wstring Version)
+{
+	if (Version == L"")
+		return 0;
+
+	wstring minVersionStr = Version.substr(0, 5);
+
+	int n = minVersionStr.compare(L"v14.3");
+
+	if (n ==0 )
+		return 1;
+
+	return 0;
+}

+ 9 - 0
PDFReaderPro_Installer/PDFReaderPro_Insrtaller/ComparVersion.h

@@ -15,11 +15,18 @@ enum class InstallNetFrameworkType
 	V40_46//安装v4.0和v4.6
 };
 
+enum class InstallVCPlusPlusType
+{
+	None,
+	V14_3,//安装2015-2019
+};
 
 class ComparVersion
 {
 public:
 	InstallNetFrameworkType NetFramework = InstallNetFrameworkType::None;
+
+	InstallVCPlusPlusType VcPlusPlus = InstallVCPlusPlusType::None;
 public:
 	//获取在线产品信息、设备已安装产品的信息
 	VertionResultType GetProductInfo(wstring productName, wstring productUrl);
@@ -28,5 +35,7 @@ public:
 public:
 	//检查设备Net框架
 	static int GetCompareNETFramework(wstring minVersion, wstring maxVersion);
+
+	static int GetCompareVCPlusPlus(wstring Version);
 };
 

+ 35 - 0
PDFReaderPro_Installer/PDFReaderPro_Insrtaller/DeviceProduct.cpp

@@ -7,6 +7,7 @@ DeviceProduct::DeviceProduct(wstring ProductName)
 {
 	m_ProductName = ProductName;
 	FindNETFramework();
+	FindVsCPulsPulsRedistributable();
 	OpenLocalMachineRootKey(RegeditCore::smPath_ProductsInfo.c_str());
 }
 
@@ -36,6 +37,14 @@ wstring DeviceProduct::GetNETTargetVersion()
 	return m_NETTargetVersion;
 }
 
+wstring DeviceProduct::GetVsCPulsPulsVersion() {
+	return m_VsCPulsPulsVersion;
+}
+
+wstring DeviceProduct::GetVsCPulsPulsInstalled() {
+	return m_VsCPulsPulsInstalled;
+}
+
 bool DeviceProduct::OpenLocalMachineRootKey(LPCTSTR productsInfoPath)
 {
 	long lRet;
@@ -206,3 +215,29 @@ bool DeviceProduct::FindNETFramework()
 
 }
 
+bool DeviceProduct::FindVsCPulsPulsRedistributable() {
+	HKEY hkRKey;
+	TCHAR szBufferAppInfo[255] = { 0 };
+	DWORD dwNameLen = 255;
+	DWORD dwType = REG_BINARY | REG_DWORD | REG_EXPAND_SZ | REG_MULTI_SZ | REG_NONE | REG_SZ | REG_DWORD_LITTLE_ENDIAN | REG_DWORD_BIG_ENDIAN | REG_LINK | REG_RESOURCE_LIST | REG_FULL_RESOURCE_DESCRIPTOR | REG_RESOURCE_REQUIREMENTS_LIST | REG_QWORD_LITTLE_ENDIAN;
+
+	if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, RegeditCore::smPath_VsCPulsPulsInfoX64.c_str(), 0, KEY_READ | KEY_WOW64_64KEY, &hkRKey) == ERROR_SUCCESS)
+	{
+
+		RegQueryValueEx(hkRKey, L"Installed", 0, &dwType, (LPBYTE)szBufferAppInfo, &dwNameLen);
+		wstring displayVersionTemp(szBufferAppInfo);
+		m_VsCPulsPulsInstalled = displayVersionTemp;
+		dwNameLen = 255;
+		memset(szBufferAppInfo, 0, 255);
+
+		RegQueryValueEx(hkRKey, L"Version", 0, &dwType, (LPBYTE)szBufferAppInfo, &dwNameLen);
+		wstring installLocationTemp(szBufferAppInfo);
+		m_VsCPulsPulsVersion = installLocationTemp;
+
+		dwNameLen = 255;
+		memset(szBufferAppInfo, 0, 255);
+		return true;
+	}
+	return false;
+}
+

+ 7 - 0
PDFReaderPro_Installer/PDFReaderPro_Insrtaller/DeviceProduct.h

@@ -46,6 +46,9 @@ private:
 
 	wstring m_NETVersion;
 	wstring m_NETTargetVersion;
+
+	wstring m_VsCPulsPulsVersion;
+	wstring m_VsCPulsPulsInstalled;
 public:
 	//²úÆ·°æ±¾ºÅ
 	wstring GetVersion();
@@ -53,6 +56,8 @@ public:
 	wstring GetInstallLocation();
 	wstring GetNETVersion();
 	wstring GetNETTargetVersion();
+	wstring GetVsCPulsPulsVersion();
+	wstring GetVsCPulsPulsInstalled();
 private:
 	//·ÃÎÊLocalMachineÖ÷¼ü
 	bool OpenLocalMachineRootKey(LPCTSTR productsInfoPath);
@@ -66,4 +71,6 @@ private:
 
 	bool FindNETFramework();
 
+	bool FindVsCPulsPulsRedistributable();
+
 };

+ 4 - 0
PDFReaderPro_Installer/PDFReaderPro_Insrtaller/FileCore.cpp

@@ -11,6 +11,10 @@ bool FileCore::IsExistProductAppPath()
 {
 	wstring installPath = PathCore::smPath_Install + L"\\" + Product::smName_Application;
 	bool isExist = PathFileExistsW(installPath.c_str());
+	if (!isExist) {
+		wstring installPathnoexe = PathCore::smPath_Install + L"\\" + L"PDFReaderProWin";
+		isExist = PathFileExistsW(installPathnoexe.c_str());
+	}
 	return isExist;
 }
 

+ 2 - 0
PDFReaderPro_Installer/PDFReaderPro_Insrtaller/KeyVar.cpp

@@ -50,6 +50,8 @@ const wstring RegeditCore::smPath_DefaultPDFOpen = L"SOFTWARE\\Microsoft\\Window
 
 const wstring RegeditCore::smPath_NETFrameworkInfo = L"SOFTWARE\\WOW6432Node\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full";
 const wstring RegeditCore::smPath_InternetProxyInfo = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Internet Settings";
+const wstring RegeditCore::smPath_VsCPulsPulsInfoX64 = L"SOFTWARE\\WOW6432Node\\Microsoft\\VisualStudio\\14.0\\VC\\Runtimes\\X64";
+const wstring RegeditCore::smPath_VsCPulsPulsInfoX86 = L"SOFTWARE\\WOW6432Node\\Microsoft\\VisualStudio\\14.0\\VC\\Runtimes\\X86";
 #pragma endregion
 
 

+ 4 - 0
PDFReaderPro_Installer/PDFReaderPro_Insrtaller/KeyVar.h

@@ -67,6 +67,10 @@ public:
 	static const wstring smPath_NETFrameworkInfo;//NET框架路径
 
 	static const wstring smPath_InternetProxyInfo;//LAN代理服务器(Internet选项,各个参数)
+
+	static const wstring smPath_VsCPulsPulsInfoX64;//Vs++2015-2019 Redistributable x64
+
+	static const wstring smPath_VsCPulsPulsInfoX86;//Vs++2015-2019 Redistributable x86
 };
 #pragma endregion
 

+ 9 - 0
PDFReaderPro_Installer/PDFReaderPro_Insrtaller/PDFReaderPro_Insrtaller.vcxproj

@@ -366,6 +366,15 @@
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release_Beta|x64'">true</ExcludedFromBuild>
     </CopyFileToFolders>
   </ItemGroup>
+  <ItemGroup>
+    <CopyFileToFolders Include="curl\x64\bin\vcruntime140.dll">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <FileType>Document</FileType>
+    </CopyFileToFolders>
+    <CopyFileToFolders Include="curl\x86\bin\vcruntime140.dll">
+      <FileType>Document</FileType>
+    </CopyFileToFolders>
+  </ItemGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
   </ImportGroup>

+ 6 - 0
PDFReaderPro_Installer/PDFReaderPro_Insrtaller/PDFReaderPro_Insrtaller.vcxproj.filters

@@ -309,5 +309,11 @@
       <Filter>资源文件\x64</Filter>
     </CopyFileToFolders>
     <CopyFileToFolders Include="curl\x86\bin\zlib1.dll" />
+    <CopyFileToFolders Include="curl\x64\bin\vcruntime140.dll">
+      <Filter>资源文件\x64</Filter>
+    </CopyFileToFolders>
+    <CopyFileToFolders Include="curl\x86\bin\vcruntime140.dll">
+      <Filter>资源文件\x86</Filter>
+    </CopyFileToFolders>
   </ItemGroup>
 </Project>

+ 1 - 0
PDFReaderPro_Installer/PDFReaderPro_Insrtaller/WndInstall.cpp

@@ -155,6 +155,7 @@ bool CFrameWnd::GetVersionState()
 	ComparVersion comparVersion;
 	VertionResultType state = comparVersion.GetProductInfo(Product::smName_Product, Product::URI_AppXml);
 	m_State.m_NetFrameworkType = comparVersion.NetFramework;
+	m_State.m_VcPlusPlusType = comparVersion.VcPlusPlus;
 	int stateBtn;
 	bool result = false;
 

+ 6 - 0
PDFReaderPro_Installer/PDFReaderPro_Insrtaller/WndInstalling.cpp

@@ -122,6 +122,12 @@ void CFrameWnd::Thread_Installing(ThreadData threadData)
 		IsNeedInstallNet = true;
 	}
 
+	//3.若缺少Vc++环境,则优先安装,目前以使用vcruntime140.dll来配置,配置环境逻辑注释掉
+	/*if (threadData.pFrame->m_State.m_VcPlusPlusType != InstallVCPlusPlusType::V14_3)
+	{
+		cmd.InstallVcPlusPluscmd();
+	}*/
+
 	//4.静默安装产品
 	threadData.pFrame->StartTimer(Timer_SilentInstall_ID);
 	int error = cmd.Installcmd();

BIN
PDFReaderPro_Installer/PDFReaderPro_Insrtaller/curl/x64/bin/vcruntime140.dll


BIN
PDFReaderPro_Installer/PDFReaderPro_Insrtaller/curl/x86/bin/vcruntime140.dll