windows下实现手动安装openvpn

首先:
安装tap驱动
获取到tap驱动的安装文件,我这里是从别的系统中安装了tap驱动的安装文件拷贝出来的TAP-Windows
目录。
这里写图片描述
然后运行命令
TAP-Windows\bin\tapinstall.exe install TAP-Windows\driver\OemVista.inf tap0901
tap驱动便能安装好了。

然后安装openvpn
获取到openvpn的安装文件
这里写图片描述

第一步安装openvpn服务
方法一:运行命令 bin\openvpnserv.exe -install 就能安装openvpn服务
方法二:也可以通过编程添加服务来安装openvpn服务。代码如下:

#define SRV_NAME        _T("OpenVPNService")                      //服务名称
#define SRV_INFO         _T(" ")    //服务说明
#define SRV_PATH       _T("\"C:\\vpn\\OpenVPN\\bin\\openvpnserv.exe\"")               //系统服务程序的路径

void CreateSrv()
{
    SC_HANDLE scMgr = NULL;
    SC_HANDLE service = NULL;

    scMgr = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE);
    if (scMgr  == NULL){
        printf("OpenSCManager() Error \n");
        return ;
     }

     service = CreateService(scMgr, SRV_NAME, SRV_INFO, SERVICE_ALL_ACCESS,
         SERVICE_WIN32_OWN_PROCESS,
         SERVICE_AUTO_START, SERVICE_ERROR_NORMAL,
         SRV_PATH, 0, 0, 0, 0, 0);
     if (service)
         printf("Create a new service successful!/ n");
     else
         printf("Failed to create a new service!/ n");

     CloseServiceHandle(scMgr);
     CloseServiceHandle(service);
}

方法三: 添加注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\OpenVPNService
这里写图片描述

第二步 添加注册表
去services.msc中找到openvpn服务,启动,会发现并不能成功。
必须在注册表中添加HKEY_LOCAL_MACHINE\SOFTWARE\OpenVPN 项
并在OpenVPN项下添加键值
这里写图片描述

添加注册表可以手动在注册表添加,当然也可用编程实现。代码如下

BOOL  CreateReg()
{
    int err = 0;
    BOOL bRet = FALSE;
    HKEY hKey = NULL;
    WCHAR path[MAX_PATH] = _T("SOFTWARE\\OpenVPN");
    //创建项,如果存在就打开  
    if (ERROR_SUCCESS != (err = RegCreateKeyEx(HKEY_LOCAL_MACHINE, path, 0, NULL,
                            REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL)))
    {
        goto RET;
    }
    //这里的键值为"",代表第一项对默认值进行设置。
    if (ERROR_SUCCESS != (err = RegSetValueEx(hKey, L"", 0, REG_SZ, (BYTE*)L"C:\\vpn\\OpenVPN",
                                                    wcslen(L"C:\\vpn\\OpenVPN") * sizeof(WCHAR))))
    {
        goto RET;
    }
    //添加 config_dir项
    if (ERROR_SUCCESS != (err = RegSetValueEx(hKey, L"config_dir", 0, REG_SZ, (BYTE*)L"C:\\vpn\\OpenVPN\\config",
                                                    wcslen(L"C:\\vpn\\OpenVPN\\config") * sizeof(WCHAR))))
    {
        goto RET;
    }
    //添加 config_ext项  
    if (ERROR_SUCCESS != (err = RegSetValueEx(hKey, L"config_ext", 0, REG_SZ, (BYTE*)L"ovpn",
        wcslen(L"ovpn") * sizeof(WCHAR))))
    {
        goto RET;
    }
    //添加 exe_path项   
    if (ERROR_SUCCESS != (err = RegSetValueEx(hKey, L"exe_path", 0, REG_SZ, (BYTE*)L"C:\\vpn\\OpenVPN\\bin\\openvpn.exe",
        wcslen(L"C:\\vpn\\OpenVPN\\bin\\openvpn.exe") * sizeof(WCHAR))))
    {
        goto RET;
    }
    //添加 log_append项   
    if (ERROR_SUCCESS != (err = RegSetValueEx(hKey, L"log_append", 0, REG_SZ, (BYTE*)L"0",
        wcslen(L"0") * sizeof(WCHAR))))
    {
        goto RET;
    }
    //添加 log_dir项   
    if (ERROR_SUCCESS != (err = RegSetValueEx(hKey, L"log_dir", 0, REG_SZ, (BYTE*)L"C:\\vpn\\OpenVPN\\log",
        wcslen(L"C:\\vpn\\OpenVPN\\log") * sizeof(WCHAR))))
    {
        goto RET;
    }
    //添加 priority项  
    if (ERROR_SUCCESS != (err = RegSetValueEx(hKey, L"priority", 0, REG_SZ, (BYTE*)L"NORMAL_PRIORITY_CLASS",
        wcslen(L"NORMAL_PRIORITY_CLASS") * sizeof(WCHAR))))
    {
        goto RET;
    }
    bRet = TRUE;
RET:
    if (hKey)
    {
        RegCloseKey(hKey);
    }

    return bRet;
}

然后在服务中启动openvpn服务就能成功启动了 。

openvpn就安装完成了。
原文地址:http://blog.csdn.net/hpp24/article/details/68944257

猜你喜欢

转载自blog.csdn.net/hpp24/article/details/68944257
今日推荐