虚拟打印安装

// InstallPrinter.cpp : Defines the entry point for the application.

//

 

#include <windows.h>

#include <tchar.h>

#include <WinSvc.h>

#include <winspool.h>

#include <stdio.h>

#include "../logging.h"

 

typedef unsigned long DWORD;

typedef int BOOL;

 

 

#define MY_INSTALL_STEPS 4

 

char sysdir[256];

char exepath[256];

char source[256];

char destination[256];

 

char buffer[4096];

DWORD needed, returned;

unsigned int i;

MONITOR_INFO_1 *mi;

MONITOR_INFO_2 mi2;

HKEY hkey, hsubkey;

LONG rc;

 

TCHAR title[256];

TCHAR monitorname[64];

char *p;

BOOL is_winnt = FALSE;

BOOL is_win4 = FALSE;

 

#define MONITORNAME TEXT("Redirected Port")

#define MONITORDLLNT TEXT("redmonnt.dll")

#define MONITORENVNT TEXT("Windows  NT x86")

#define MONITORHLP TEXT("redmon.hlp")

#define MONITORKEY TEXT("Redirection Port Monitor")

 

#define UNINSTALLPROG TEXT("unredmon.exe")

#define UNINSTALLKEY TEXT("SOFTWARE//Microsoft//Windows//CurrentVersion//Uninstall")

#define PORT_KEY TEXT("SYSTEM//ControlSet001//Control//Print//Monitors//Redirected Port//Ports//CUIZI-ZTE")

#define UNINSTALLSTRINGKEY TEXT("UninstallString")

#define DISPLAYNAMEKEY TEXT("DisplayName")

 

#define GHOSTSCRIPT_KEY1 TEXT("SOFTWARE//AFPL Ghostscript")

#define GHOSTSCRIPT_KEY2 TEXT("SOFTWARE//AFPL Ghostscript//8.53")

 

#define Environment  TEXT("Windows NT x86")

#define VPRINTER_NAME "zte-vprinter"

 

char*  PMON_KEY = "SYSTEM//CurrentControlSet//Control//Print//Environments//Windows NT x86//Print Processors//vprproc";

char*  TEMP_KEY = "SYSTEM//CurrentControlSet//Control//Session Manager";

#define MAXSTRING 254

 

BOOL MyInstallPrinter(int *pStepIndex);

BOOL MyReInstallPrinter(int StepIndex);

 

BOOL InstallProcessor();

BOOL DelProcessor();

 

BOOL ServiceStop(char * pMachingName, char *pService);

BOOL ServiceStart(char * pMachingName, char *pService);

 

int APIENTRY WinMain(HINSTANCE hInstance,

                     HINSTANCE hPrevInstance,

                     LPSTR     lpCmdLine,

                     int       nCmdShow)

{

  // TODO: Place code here.

    int Index;

int ComdFlag = 1;

char path[MAX_PATH];

HANDLE hMutex; 

hMutex = CreateMutex(NULL, FALSE, "##cuizi_vprinter##");

if (hMutex == NULL) 

{

printf("CreateMutex error: %d/n", GetLastError() ); 

}

else if (GetLastError() == ERROR_ALREADY_EXISTS) 

{

return 1;

}

 

#if 0

GetSystemDirectory(path, sizeof(path));

strcat(path, "//vprinter.log");

#else

strcpy(path, "vprinter.log");

#endif

log_open(path, LL_DEBUG, LL_ERROR);

if(1 == ComdFlag)

{/*Install printer*/

Index = 0;

if(!MyInstallPrinter(&Index))

{/*Install Fail, reInstall*/

log_write("install vprinter failed once step[%d]/n", Index);

MyReInstallPrinter(MY_INSTALL_STEPS);

Index = 0;

log_write("install vprinter failed, try other time/n");

if(!MyInstallPrinter(&Index))

{

log_write("install vprinter failed twice step[%d]/n", Index);

MyReInstallPrinter(MY_INSTALL_STEPS);

}

}

}else

{/*ReInstall printer*/

MyReInstallPrinter(MY_INSTALL_STEPS);

}

log_close();

if(hMutex)

{

ReleaseMutex(hMutex);

}

return FALSE;

}

 

typedef enum

{

 wvUnknown = 0,

 wvWin95,

 wvWin95OSR2,

 wvWin98,

 wvWin98SE,

 wvWinME,

 wvWinNT3,

 wvWinNT4,

 wvWin2000,

 wvWinXP,

 wvWin2003,

 wvVista,

 wvVista_ia64,

 wvVista_x64,

 wvWin7,

 wvWin7_ia64,

 wvWin7_x64

} TWindowsVersion;

 

typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO);

typedef BOOL (WINAPI *PGPI)(DWORD, DWORD, DWORD, DWORD, PDWORD);

 

// INTEL ITANIUM64

#define PRODUCT_ENTERPRISE_SERVER_IA64          0x0000000F

// AMD 和 INTEL 64位

#define PROCESSOR_ARCHITECTURE_AMD64            0x00000009

 

TWindowsVersion GetWindowsVersion()

{

OSVERSIONINFO  VersionInfo;

TWindowsVersion Result;

Result = wvUnknown;

VersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);

GetVersionEx( &VersionInfo );

switch(VersionInfo.dwPlatformId)

{

case VER_PLATFORM_WIN32_WINDOWS:

{

switch(VersionInfo.dwMinorVersion)

{

case 0:

if (_T('B') == VersionInfo.szCSDVersion[1]) 

{

Result = wvWin95OSR2;

}

else

Result = wvWin95;

break;

case 10:

if (_T('A') == VersionInfo.szCSDVersion[1]) 

{

Result = wvWin98SE;

}

else

{

Result = wvWin98;

}

break;

case 90:

if (VersionInfo.dwBuildNumber = 73010104)

{

Result = wvWinME;

}

break;

default:

break;

}

}

break;

case VER_PLATFORM_WIN32_NT:

{

switch(VersionInfo.dwMajorVersion) {

case 3:

Result = wvWinNT3;

break;

case 4:

Result = wvWinNT4;

break;

case 5:

if(0 == VersionInfo.dwMinorVersion)

{

Result = wvWin2000;

}else if(1 == VersionInfo.dwMinorVersion)

{

Result = wvWinXP;

}else if(2 == VersionInfo.dwMinorVersion)

{

Result = wvWin2003;

}

break;

// case 6:

// if (0 == VersionInfo.dwMinorVersion)

// {

// Result = wvVista;

// }

// else if (1 == VersionInfo.dwMinorVersion)

// {

// Result = wvWin7;

// }

// break;

case 6:

{

if (0 == VersionInfo.dwMinorVersion)

{

Result = wvVista;

}

else if (1 == VersionInfo.dwMinorVersion)

{

Result = wvWin7;

}

 

DWORD dwType = 0;

PGPI pGPI = (PGPI) GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "GetProductInfo");

pGPI( VersionInfo.dwMajorVersion, VersionInfo.dwMinorVersion, 0, 0, &dwType);

 

if (dwType == PRODUCT_ENTERPRISE_SERVER_IA64)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值