如何解决GUIminer"由于应用程序配置不正确"无法启动挖矿的问题?

如何解决GUIminer"由于应用程序配置不正确"无法启动挖矿的问题?,第1张

原因分析:

综合互联网上的资料,绝大部分是以下三种原因:

该问题的原因之一:guiminer程序不完整,请重新下载绿色纯净版。

该问题的原因之二:您的计算机的Windows Installer服务没有开启。

其解决方法是打开控制面板→管理→服务,将Windows Installer服务开启,并设为自动,再重启电脑。

该问题的原因之三:您的计算机上没有安装Visual Studio的运行库。

该应用程序是Visual Studio 2005及其以上版本开发的,其依赖于相应的运行库,而您的电脑上没有安装该运行库。(对于VC6或VS2003开发的应用程序,如果缺少库文件,是会提示缺少“**.dll”,但VS2005或VS2008的却只提示“由于应用程序配置不正确??”。)

其解决方法不是重装应用程序,更不是重装系统,而是安装相应的运行库(Microsoft Visual C++ 20** Redistributable Package,即vcredist_x86.exe。

★区分您的程序是VS的哪个版本开发的确实有点困难,甚至有些软件是多个版本开发的,那就多种vcredist_x86.exe都装上,它们互相兼容,就能解决您计算机上大多数软件的同类问题了。(2005和2008的都装上后“添加/删除程序”会显示如图5)。

★以下以“20**”代表“2005”或“2008”或“2009”或“2010”。

所需安装包

仅需一个文件——微软官网下载中心下载的vcredist_x86.exe

步骤

打开控制面板→管理工具→服务,如果Windows Installer服务没有开启,则设其为自动,再重启电

脑。如果没有解决问题则继续。

可以初步判断您的程序是VS的哪个版本开发的。

(打开应用程序所在目录,搜索是否有mfc或msvc开头的文件,如果有,请查看其文件版本可知VC的版本。请看下图,8表示VC8.0开发的,9表示VC9.0开发的)

VS2003的VC版本是VC.1,

VS2005的VC版本是vc8.0,

VS2008的VC版本是vC9.0。

在控制面板的“添加/删除程序”查看本机是否安装了Microsoft Visual C++ 20** Redistributable Package。

如果没有上图中的Microsoft Visual C++ 20** Redistributable,则继续。

从微软下载中心下载Microsoft Visual C++ 20** Redistributable Package。该文件有32位的(X86),也有64位的(X64)。下载地址如下。

双击运行刚才下载到的vcredist_x86.exe,其会自动安装Microsoft Visual C++ 20** Redistributable Package

检查“添加/删除程序”里是否有了该项

如果有该项,则说明安装成功。然后开启你的应用程序,如果没有报错,则说明问题解决。

首先总结一下“由于应用程序配置不正确,应用程序未能启动”这类问题出现的原因:

在Windows XP SP2以后,Windows引入了Side-by-Side执行的概念,这个概念本来是.NET提出来的,但是Windows后来将这个概念集成到操作系统层面上来了。大家都应该知道Dll Hell的问题,为了解决Dll Hell问题,Side-By-Side提出不同版本的dll文件可以同时存在于同一个系统里面,而且依赖于不同版本dll的应用程序在运行的时候可以使用到它当初被编译生成的dll。举个例子:

1、假定编写了一个C++程序A,是使用MFC 8.0(这个版本是随着Visual Studio 2005)发布的。

2、之后机器升级了Visual Studio的版本,从2005升级到2008,2008的MFC库是9.0版本的,这个时候操作系统里面安装了两个版本的MFC,分别是8.0和9.0。

3、用Visual Studio 2008编写了另外一个C++程序B,B依赖与MFC 9.0。

4、如果运行程序A的话,操作系统会将MFC 8.0加载到A的进程里面。

5、如果这时同时运行程序B,操作系统会将MFC 9.0加载到B的进程里面。这就是Side-by-side的执行概念。

操作系统之所以能够这样做,是因为它在加载程序A和B之前,除了查看PE格式里面A和B所依赖的Dll信息,都会查看A和B的manifest文件。Manifest文件保存了Windows可执行文件(包括exe和dll文件)要运行起来的环境设置信息,文件名一般是可执行文件的文件全名加上.manifest。例如notepad.exe的manifest文件就应该是notepad.exe.manifest。另外有的程序将manifest文件直接嵌入到可执行文件的资源里面了,这也就是为什么有的时候看不到程序的manifest文件的原因。通常来说,一个manifest文件的内容大致如下:

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>

<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">

<security>

<requestedPrivileges>

<requestedExecutionLevel level='asInvoker' uiAccess='false' />

</requestedPrivileges>

</security>

</trustInfo>

<dependency>

<dependentAssembly>

<assemblyIdentity type='win32' name='Microsoft.VC90.DebugCRT' version='9.0.21022.8'

processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />

</dependentAssembly>

</dependency>

</assembly>

上面的例子里面,就说明这个程序依赖于CRT 9.0,而且是调试版的,CPU架构是32位的CPU。对于将manifest文件嵌入到资源文件的程序也有办法看到manifest的信息。

1、一种是使用mt.exe(Visual Studio自带的manifest处理程序):

mt -inputresource:test.exe#1 /out:test.manifest

2、另外一种是使用dumpbin程序将整个exe的内容打印到一个文件,然后用文本编辑器打开,搜索Assem字符串样式就能找到manifest信息:


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/1604.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-01-30
下一篇2023-01-30

发表评论

登录后才能评论

评论列表(0条)

    保存