如何解决VC"应用程序无法启动,因为应用程序的并行配置不正确"问题

如何解决VC"应用程序无法启动,因为应用程序的并行配置不正确"问题,第1张

出现:应用程序无法启动,因为应用程序的并行配置不正确的解决方法:

运行某些软件时,突然提示出错信息“应用程序无法启动,因为应用程序的并行配置不正确。有关详细信息,请参阅应用程序事件日志,或使用命令行sxstrace.exe工具。”

查看windows应用程序事件日志:计算机——>右击——>管理——>事件查看器——>应用程序和服务日志

出现这个问题是因为安装windows 后,或使用ghost版本安装后, windows没有安装Visual C++ 库,而有些软件需要Visual C++ 库。

有些软件可能是VC2008开发的,可以下载安装Microsoft Visual C++ 2008。

另外建议下载Microsoft Visual C++ 2010 可再发行组件包 (x86),原因在于最新版本保持了向下兼容的特性。

注意:安装完了后,还需要重启一下计算机。

还有一种情况是:所安装的程序不支持当前windows系统版本,请留意该版本的程序所支持的系统。

这是我前几天写的一个例子:我给你注释一下,如果还不懂,就加我:Q11(59)Q(59)903

// ProcApp.cpp : 定义控制台应用程序的入口点。

//

#pragma once

#include "stdafx.h"

#include <windows.h>

#include <winioctl.h>

//这是我自定义的类型,和你问和问题无关,你就把它当成一个类型就是了

typedef struct _CALL_BACK

{

HANDLE pParentId

HANDLE pProcessId

BOOLEAN bCreate

}CALLBACKINFO,*PCALLBACKINFO

//这个定义也和创建服务无关。你就把它当成一个常量吧

#define IOCTL_NTPROCDRV_GET_PROCINFO CTL_CODE(FILE_DEVICE_UNKNOWN,0x0800,METHOD_BUFFERED,FILE_READ_ACCESS|FILE_WRITE_ACCESS)

int _tmain(int argc, _TCHAR* argv[])

{

wchar_t szSymlName[]=L"slNTProcDrvYH"

wchar_t szDriverPath[MAX_PATH]

wchar_t *p

::GetFullPathName(L"服务.sys",MAX_PATH,szDriverPath,&p)

//上面这个是得到服务的可执行文件路径,一个服务总有一个可执行文件的

//打开服务管理器,第一个参数是计算机名,本机就用NULL,第二个是数据库名

//默认数据库就用NULL,第三个是访问权限。这个API返回服务管理器句柄

SC_HANDLE scm=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS)

if (!scm)

{

printf("OpenSCManager失败!")

return 0

}

//这个是创建服务,它的第一个参数是服务管理器的句柄,第二个参数是服务

//名,第三个参数是服务的显示名,第四个参数是权限设置,第五个是服务类

//型,其它的你看一下MSDN吧

SC_HANDLE scs=CreateService(scm,szSymlName,szSymlName,SERVICE_ALL_ACCESS,SERVICE_KERNEL_DRIVER,SERVICE_DEMAND_START,SERVICE_ERROR_NORMAL,szDriverPath,NULL,0,NULL,NULL, NULL)

if (!scs)

{

int nError=GetLastError()

if (nError==ERROR_SERVICE_EXISTS||nError==ERROR_SERVICE_MARKED_FOR_DELETE)

{

scs=OpenService(scm,szSymlName,SERVICE_ALL_ACCESS)

}

if (!scs)

{

printf("CreateService失败!%d",GetLastError())

return 0

}

}

//这里是启动服务

if (!::StartService(scs,0,NULL))

{

int nError=::GetLastError()

if (nError!=ERROR_SERVICE_ALREADY_RUNNING)

{

printf("StartService失败!%d\n",nError)

CloseServiceHandle(scs)

CloseServiceHandle(scm)

return 0

}

}

//下面的和你的问题没有关了,你可以不用看了,但是后面有个关闭句柄的,不要忘了

HANDLE hDriver=::CreateFile(L"\\\\.\\slNTProcDrv",GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL)

if (hDriver==INVALID_HANDLE_VALUE)

{

printf("打开设备失败!")

return 0

}

HANDLE hProcessEvent=::OpenEvent(SYNCHRONIZE,FALSE,TEXT("Global\\NTProcDrvProcessEvent"))

if (!hProcessEvent)

{

printf("OpenEvent失败!%d\n",::GetLastError())

CloseServiceHandle(scs)

CloseServiceHandle(scm)

return 0

}

CALLBACKINFO callbackinfo,callbacktemp={0}

while(::WaitForSingleObject(hProcessEvent,INFINITE)==WAIT_OBJECT_0)

{

DWORD nBytsReturn

BOOL bRet=::DeviceIoControl(hDriver,IOCTL_NTPROCDRV_GET_PROCINFO,NULL,0,(LPVOID)&callbackinfo,sizeof(callbackinfo),&nBytsReturn,NULL)

if (bRet)

{

if (callbackinfo.bCreate!=callbacktemp.bCreate||callbacktemp.pParentId!=callbackinfo.pParentId||callbackinfo.pProcessId!=callbacktemp.pProcessId)

{

if (callbackinfo.bCreate)

{

printf("有进程被创建,PID:%d\n",callbackinfo.pProcessId)

}

else

{

printf("有进程被结束,PID: %d\n",callbackinfo.pProcessId)

}

}

}

else

{

printf("进程信息获取失败!")

break

}

}

CloseHandle(hDriver)

SERVICE_STATUS ss

::ControlService(scs,SERVICE_CONTROL_STOP,&ss)

::DeleteService(scs)

::CloseServiceHandle(scs)

::CloseServiceHandle(scm)

return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7803410.html

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

发表评论

登录后才能评论

评论列表(0条)

保存