驱动安装+打包程序

背景

项目背景为非UVC标准USB工业相机,连接Windows PC,需要安装特定USB驱动。我负责开发PC端相机软件部分(已完成),所以也需要把驱动安装这部分囊括进来。

USB芯片厂商已经提供了winxp/winvista/win7/win8/win8.1/win10、32bits/64bits不同平台的不同驱动文件,包括.inf、.sys、.cat、.dll文件。因此插上相机设备后,可以找到对应平台驱动,通过Windows设备管理器或者右键.inf文件进行驱动的安装。但是这些事情对于开发人员只是鼠标点点的操作,对于用户却会成为很麻烦的事情。因此开发PC端软件的我需要简化驱动安装的一切操作,尽量做到对用户透明。

捣鼓了不少时间,写出目前的解决方案。

驱动安装

为了让用户接触不到驱动安装的繁琐操作,只能用代码解决了,解决过程中在《竹林蹊径——深入浅出Windows驱动开发》这本书上受益匪浅,大概阅读,也算是加深了硬件设备与Windows系统间连接过程的理解。

开发环境win8.1 vs2013 c++ 控制台应用程序(有预编译头)
spdlog为日志输出(github开源项目)
使用的ANSI字符串

  • 驱动预安装部分,上代码,参考竹林蹊径第12章

API参考链接
该函数成功运行需要程序具有管理员权限,具体可在项目属性->链接器->清单文件->UAC执行级别中更改为requireAdministrator。

BOOL InstallDriver(TCHAR* inf_path, TCHAR* inf_name_out)
{
    /*
    * inf_path: .inf文件所在路径,例如C:\\driver.inf
    * inf_name_out: inf文件预安装成功或系统已存在,则返回相应文件名,如oemxx.inf
    */
    TCHAR path1[MAX_PATH] = {
  0};
    TCHAR *path2;
    if (FALSE == SetupCopyOEMInf(inf_path, NULL, SPOST_PATH, SP_COPY_NOOVERWRITE, path1, MAX_PATH, NULL, &path2))   //需要管理员权限
    {
        DWORD error = GetLastError();
        if (error == ERROR_FILE_EXISTS)
        {
            spdlog::get("driver_install_info")->info("the driver file has existed, so succeeded");
            //cout << "the driver file has existed, so succeeded" << endl;
            //_tprintf(_T("the oem name is: %s\n"), path2);
            spdlog::get("driver_install_info")->info("the oem name is: \n" + string(path2));
            //cout << path2;
            //printf("the file name is: %s", path2);
            _tcscpy_s(inf_name_out, MAX_PATH, path2);
            return TRUE;
        }
        else
        {
            spdlog::get("driver_install_info")->info("install failed, ");
            
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 是的,.NET的打包程序可以打包SQL Server安装程序。 使用.NET打包程序可以将SQL Server安装程序及其相关组件打包成一个可执行文件或安装包。打包程序会将所有必要的文件和资源一起打包,以便在目标计算机上进行安装和部署。 打包程序不仅可以打包SQL Server的安装程序本身,还可以包括相关的驱动程序、配置文件、脚本、服务等。这样,用户在安装时只需运行打包程序,就能自动安装和配置SQL Server,而无需手动下载并运行SQL Server的安装程序。 通过打包程序,可以将SQL Server安装程序打包成一个独立的安装包,方便在不同的环境中进行部署和安装。这对于需要在多台计算机上进行SQL Server部署的开发人员和系统管理员来说是非常有帮助的。 总而言之,.NET的打包程序可以方便地打包SQL Server安装程序,以便在目标计算机上进行部署和安装。这样可以简化部署过程,提高效率,并确保SQL Server安装的一致性和正确性。 ### 回答2: 是的,.NET提供了一种名为ClickOnce的打包程序的技术,它可以用于打包并分发SQL Server安装程序。ClickOnce是一种用于创建和发布Windows应用程序的部署技术,它支持将软件打包成一个独立的安装程序文件,用户只需点击一次即可安装并运行应用程序。 使用ClickOnce来打包SQL Server安装程序时,可以将SQL Server安装程序文件和所需的依赖项一起打包到一个ClickOnce应用程序中。这样,用户只需下载并点击该安装程序,便可自动安装SQL Server程序到他们的计算机上。 在打包SQL Server安装程序时,需要确保点击一次应用程序能够正确地检测和安装用户计算机上所需的SQL Server版本。可能需要在ClickOnce应用程序中包含一些额外的逻辑来检测是否安装了SQL Server,并根据情况做出相应的安装操作。 总之,.NET的打包程序技术ClickOnce可以用于打包并分发SQL Server安装程序,使用户能够方便地安装和使用SQL Server。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值