精华内容
下载资源
问答
  • 不少朋友曾经问:我自己做了一程序,打包安装后,发现必须先安装其他支持的库才能使用,或者我的应用程序有好几安装包,客户不希望一个个点击安装,而是希望傻瓜式的点一setup.exe就自动全部安装完。...
  • 如何多个软件安装程序做成一个安装程序,然后自动安装.比如说把QQ .播放软件,迅雷等等.或者用什么编制软件合成.要不有时候电脑中病毒了,要重装.重装后其它软件也要安装,而且要一个一个来装.这样一来很麻烦,我想请教...
    如何把多个软件安装程序做成一个安装程序,然后自动安装.比如说把QQ .播放软件,迅雷等等.或者用什么编制软件合成.要不有时候电脑中病毒了,要重装.重装后其它软件也要安装,而且要一个一个来装.这样一来很麻烦,我想请教一下关于这个合成(打包)问题!! 有那位高手可以说一下吗,谢谢!!!这样一来我就可以刻成一张碟,帮别人重装就不用下载安装了!!
    展开全文
  • 1.前言不少朋友曾经问:我自己做了一程序,打包安装后,发现必须先安装其他支持的库才能使用,或者我的应用程序有好几安装包,客户不希望一个个点击安装,而是希望傻瓜式的点一setup.exe就自动全部安装完。...

    1.前言
    不少朋友曾经问:我自己做了一个程序,打包安装后,发现必须先安装其他支持的库才能使用,或者我的应用程序有好几个安装包,客户不希望一个个点击安装,而是希望傻瓜式的点一个setup.exe就自动全部安装完。

    其实这样的安装程序只要留心一下都很容易发现很多公司的安装程序都有这个功能,安装Visual Studio.NET的时候安装完了会提示是否要安装MSDN;安装瑞星杀毒软件的时候安装完了会提示是否安装瑞星防火墙继而提示是否安装卡卡助手;……。

    2.编写setup.exe来完成安装引导
    现在假设我们设计了一个系统,这个系统是用.net framework1.1编写的,用到了SQL SERVER2000数据库,也就是说这个系统安装之前必须安装.net framework1.1,如果是在Windows 2000一下的机器安装还必须保证数据访问组件Microsoft Data Access Components (MDAC)的版本在2.6以上,因为.net framework1.1使用的是MDAC2.6,而安装.net framework1.1的时候并不会自动安装这个组件。

    综上所述,要使我们的系统可以正确的在Windows XP、Windows2000(Server)上正确运行,就必须首先安装MDAC2.6以上版本和.net framework1.1。我们正要编写这样一个setup.exe来来完成这个安装过程。

    2.1实现方法
    我们检查一下可以发现,MDAC版本信息和.net framework版本信息是可以在注册表里找到的。

    MDAC的版本信息在HKEY_CLASSES_ROOT的MDACVer.Version/CurVer中;安装了.net framework的电脑就会有SOFTWARE/Microsoft/.NETFramework/policy/v1.1的项。

    假设现在我们手上有MDAC2.7的安装包mdac2.7.exe、.net framework1.1的安装包dotnetfx.exe和自己的系统安装包MyAppSetup.msi,我们要实现setup.exe完成这三个程序的自动安装。

    setup.exe运行后,即检查MDAC版本,如果发现它的版本低于2.6则提示安装MDAC2.7,并等待MDAC安装完成后,再检测是否已经安装.net framework1.1,如果已经安装则直接运行MyAppSetup.msi安装自己的系统,否则提示必须安装.net framework1.1,等.net framework1.1的安装进程结束后还必须检测是否成功安装,因为安装过程中用户可能取消安装,如果成功安装就把MyAppSetup.msi安装路径写入注册表的Runonce,等系统重启后才继续安装,这是因为.net framework1.1安装完后需要重启系统。

    2.2编码
    由于这个程序的安装有可能是在.net framework1.1安装之前安装的,所以我们不能使用.net framework来编写,如果还使用.net framework来编写,它本身又要.net framework下运行,这就造成“反锁”的效果了:房子锁了,我要进去需要钥匙,可是钥匙在房里。

    这里我们使用VC++6.0来编写。

    首先我们新建一个MFC应用程序,在向导中选择基于窗体的应用程序,我们不用控制台应用程序,是因为我不想在运行setup.exe的时候弹出一个dos控制台。

    我们给这个项目起名叫Setup,在VC++6.0自动生成的代码中Source Files里有Setup.cpp、SetupDlg.cpp和StdAfx.cpp;在Header Files里有Resource.h、Setup.h、SetupDlg.h和StdAfx.h。

    我们打开Setup.h,在CSetupApp类里增加两个成员函数:

           void InstallDotNetApplication();

           BOOL InstallMDAC();

    继而打开Setup.cpp,由于我们不在需要运行这个工程的窗体,我们把BOOL CSetupApp::InitInstance()函数的下面代码注释掉:

    /*CSetupDlg dlg;

           m_pMainWnd = &dlg;

           int nResponse = dlg.DoModal();

           if (nResponse == IDOK)

           {

                  // TODO: Place code here to handle when the dialog is

                  //  dismissed with OK

           }

           else if (nResponse == IDCANCEL)

           {

                  // TODO: Place code here to handle when the dialog is

                  //  dismissed with Cancel

           }*/

    这时候我们可以删除SetupDlg.cpp和SetupDlg.h两个文件,并把应用它们的代码也删除。

    我们实现安装MDAC的函数InstallMDAC的代码:

    //安装MDAC

    BOOL CSetupApp::InstallMDAC()

    {

           HKEY key;

           //检测注册表中MDAC的版本

           LONG res = RegOpenKeyEx(HKEY_CLASSES_ROOT,"MDACVer.Version//CurVer",

                  0,KEY_READ,&key);

           //如果注册表有MDAC安装信息

           if(res == ERROR_SUCCESS)

           {

                  BYTE value[100];

                  DWORD dw = 100;

                  DWORD dwType = REG_SZ;

                  memset(value,0,100);

                  RegQueryValueEx(key,NULL,NULL,&dwType,value,&dw);

                  //如果MDAC版本大于等于6.0则不需安装返回TRUE

                  if(strcmp("MDACVer.Version.2.6",(const char*)value) <= 0)

                  {

                         return TRUE;

                  }

           }

           RegCloseKey(key);

           //如果注册表没有MDAC信息或者版本小于6.0,则提示安装

           if(MessageBox(NULL,"此操作系统的MDAC版本太低,需要安装MDAC2.7/r/n现在就安装吗?",

                  "系统提示",MB_YESNO) == IDNO)

           {

                  //如果用户选择不安装则不能往下进行

                  return FALSE;

           }

           //构造进程信息

           STARTUPINFO startinfo;

           PROCESS_INFORMATION proinfo;

           ZeroMemory( &startinfo, sizeof(startinfo) );

           startinfo.cb = sizeof(startinfo);

           ZeroMemory( &proinfo, sizeof(proinfo) );

           //启动MDAC安装进程

           BOOL b = CreateProcess(NULL,"mdac2.7.exe",NULL,NULL,FALSE,

                         0,NULL,NULL,&startinfo,&proinfo);

           if(!b)

           {

                  AfxMessageBox("启动mdac2.7 安装包失败,请确定文件是否存在");

                  return FALSE;

           }

           //等待安装完成

           WaitForSingleObject(proinfo.hProcess,INFINITE);

           return TRUE;

    }

    然后我们继续实现检测安装.net framework1.1和安装自己系统程序的函数InstallDotNetApplication()的代码:

    //安装.NET应用程序

    void CSetupApp::InstallDotNetApplication()

    {

           HKEY key;

           //检测注册表是否有.net framework1.1

           LONG res = RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE//Microsoft//.NETFramework//policy//v1.1",

                  0,KEY_READ,&key);

           RegCloseKey(key);

           //如果没有安装.net framework1.1

           if(res != ERROR_SUCCESS)

           {

                  //构造启动.net framework1.1的进程信息

                  STARTUPINFO startinfo;

                  PROCESS_INFORMATION proinfo;

                  ZeroMemory( &startinfo, sizeof(startinfo) );

                  startinfo.cb = sizeof(startinfo);

                  ZeroMemory( &proinfo, sizeof(proinfo) );

                  BOOL b = CreateProcess(NULL,"dotnetfx.exe",NULL,NULL,FALSE,

                         0,NULL,NULL,&startinfo,&proinfo);

                  if(!b)

                  {

                         AfxMessageBox("启动.net Framework1.1 安装包失败,请确定文件是否存在");

                         return;

                  }

                  //等待.net framework1.1安装完成

                  WaitForSingleObject(proinfo.hProcess,INFINITE);

                  CloseHandle(proinfo.hProcess);

                  CloseHandle(proinfo.hThread);

            //再次检测是否安装.net framework1.1防止用户安装.net framework1.1的过程中退出

                  if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE//Microsoft//.NETFramework//policy//v1.1",

                  0,KEY_READ,&key) == ERROR_SUCCESS)

                  {

                         HKEY hk;

                         DWORD nBufferLength = 1000;

                         char lpBuffer[1000];

                         //自己的应用程序的路径

                         DWORD n = GetCurrentDirectory(nBufferLength,(LPTSTR )lpBuffer);

                         memcpy(lpBuffer + n,"//MyAppSetup.msi",strlen("//MyAppSetup.msi"));

                         //由于.net framework1.1安装后要重启,自己的应用程序并不是马上安装而是重启后才安装,

                         //这里写在注册表RunOnce项里,重启后自动执行

                         res = RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE//Microsoft//Windows//CurrentVersion//RunOnce",

                                0,KEY_ALL_ACCESS,&hk);

                         if(res!=ERROR_SUCCESS)

                         {

                                AfxMessageBox("打开注册表失败");

                                return;

                         }

                         res=RegSetValueEx(hk,"MyAppSetup",0,REG_SZ, (unsigned char*)lpBuffer,strlen(lpBuffer));

                         if(res!=ERROR_SUCCESS)

                         {

                                AfxMessageBox("写入注册表失败!");

                                return;

                         }

                         RegCloseKey(hk);

                         Sleep(1000);

                         //提示重启,重启后可自动安装

                         if(AfxMessageBox("必须重启计算机才能正确安装系统,现在就重启吗?",MB_OKCANCEL|MB_ICONQUESTION) == IDOK)

                         {

                                HANDLE hToken;

                                TOKEN_PRIVILEGES tkp;

                                // Get a token for this process.

                                if (OpenProcessToken(GetCurrentProcess(),

                                       TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))

                                {

                                       // Get the LUID for the shutdown privilege.

                                       LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,

                                              &tkp.Privileges[0].Luid);

                                       tkp.PrivilegeCount = 1;  // one privilege to set   

                                       tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

                                       // Get the shutdown privilege for this process.

                                       AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,

                                              (PTOKEN_PRIVILEGES)NULL, 0);

                                }

                                //强制重启系统

                                if(!ExitWindowsEx(EWX_REBOOT|EWX_FORCE,0))

                                {

                                       CString s;

                                       s.Format(_T("Windows重启失败,请手动重启Windows后继续安装 %d"),GetLastError());

                                       AfxMessageBox(s);

                                }

                         }

                  }

           }

           else//如果安装了.net framework1.1则不用安装并且安装自己的应用程序

           {

                  HINSTANCE hin = ShellExecute(NULL,"open","MyAppSetup.msi","","",SW_SHOW);

                  if((int)hin <= 32)

                  {

                         AfxMessageBox("启动安装包MyAppSetup.msi失败,请确定文件是否存在");

                         return;

                  }

           }

    }

    我们在CSetupApp::InitInstance()函数的return FALSE;之前添加调用:

           //安装MDAC

           if(!InstallMDAC())

           {

                  return FALSE;

           }

           //安装.NET应用程序

           InstallDotNetApplication();

    最后把图标换成Setup的图标,编译成Release版本的可执行文件,把Setup.exe和mdac2.7.exe、.net framework1.1以及MyAppSetup.msi放在一个文件夹里打包成rar发给客户叫他点击Setup就可以了。

    源码下载:http://download.csdn.net/source/1084514

     

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhyuanshan/archive/2009/03/08/3970525.aspx

    展开全文
  • 自动安装的时候就会是问题。 通常对于这问题比较灵活的解决方法就是TCL的Expect。但Expect还需要另外安装,平台通用性不高,比较麻烦。 另外一些简单的方法倒也是有,不过可用性不高,特别是对...

    Linux中shell脚本运行时经常需要进行交互,比如安装软件的过程中对license声明的确认,需要输入yes,回车之类的确认信息。这个在自动化安装的时候就会是个问题。

     

    通常对于这个问题比较灵活的解决方法就是TCL的Expect。但Expect还需要另外安装,平台通用性不高,比较麻烦。

     

    另外一些简单的方法倒也是有,不过可用性不高,特别是对要求多次交互就吃力了。但怎么说其还是能解决大多数的问题,因为复杂的情况还是比较少的。比 如要一个调用一个安装脚本 : installWAS.sh, 这个脚本要求输入回车,则可以:echo |  installWAS.sh;如果要求输入yes|no,加回车,则可以echo yes|installWAS.sh. 这下自动化安装就有希望了。

     

    再有一下的代码也可以带来一些思路:

     

    [0 No.2015 huan@huan ~/tmp]$ cat foo read -s -n1 -p "Press any key to continue ... " echo "Your inputs: $REPLY"
    [0 No.2016 huan@huan ~/tmp]$ ./foo < /dev/null Your inputs:
    [0 No.2017 huan@huan ~/tmp]$

     

    转自http://blog.chinaunix.net/uid-26707720-id-3324757.html

    转载于:https://www.cnblogs.com/guo-xiang/p/5760670.html

    展开全文
  • 不知道大家有没有遇到过这种情况,当我们运行电脑或者将电脑借给别人,拿回来的时候电脑上就会出现很多自动安装软件,每次都要一个个的将它们卸载,真的是太麻烦了,今天就教教大家如何设置电脑不自动安装软件,一...

    不知道大家有没有遇到过这种情况,当我们运行电脑或者将电脑借给别人,拿回来的时候电脑上就会出现很多自动安装的软件,每次都要一个个的将它们卸载,真的是太麻烦了,今天就教教大家如何设置电脑不自动安装软件,一起来看看吧。

    在这里插入图片描述
    方法一:禁止用户安装
    1、按下组合键【Win+R】打开运行窗口,或者点击桌面左下角的【开始】,在搜索框内输入【运行】回车打开,然后在窗口内输入【gpedit.msc】,输入命令之后就可以点击【确定】。

    在这里插入图片描述
    2、接着会弹出本地策略组编辑器的窗口,点击【计算机配置】-【管理模板】-【Windows组件】-【Windows Installers】,然后在右边的设置列表内找到【禁止安装软件】。

    在这里插入图片描述
    3、双击禁止安装软件后弹出窗口,在窗口内选择【已启用】,将下面的用户安装行为改为【隐藏用户安装】,完成之后就可以点击确定了,这样电脑就不会再自动安装软件了。

    在这里插入图片描述
    方法二:禁用文件路径
    1、在桌面上找到计算机,单击右键选择【管理】,弹出计算机管理窗口之后,展开下面的【服务和应用程序】,点击【服务】选项,在右边的名称列表内找到【Windows Installer】,双击打开属性窗口。

    在这里插入图片描述
    2、弹出属性窗口之后,点击【常规】,将里面的启动类型改为【禁用】,修改好之后就可以点击【确定】了,这样就会禁用了C盘路径,软件就不会再自动安装了。

    在这里插入图片描述
    以上的两种方法可以让软件不再自动安装,如果需要解除就按照步骤回去重新设置就好了。

    展开全文
  • 电脑的配置都是很高的啦,开几个虚拟机是没有问题的,一个虚拟机就相当于一台独立的电脑系统啦,现在很多游戏工作室会利用虚拟机来多开游戏,多开游戏也是需要用到不同的IP的,那么多个虚拟机如何自动换IP让每个...
  • 很多人在下载安装一些软件的时候,会发现部分不怎么“纯洁”的软件,往往会自动安装捆绑软件!很朋友都是防不胜防,一不小心,桌面就了好几自己没有安装过的软件,心累呀~其实,Win10为了帮助用户可以更好的...
  • centos 如何安装软件

    2017-03-14 10:53:00
    yum命令 (一)yum基本概念 1)yum是什么 yum = Yellow dog Updater, Modified 主要功能是更方便的添加...可以同时配置多个资源库(Repository) 简洁的配置文件(/etc/yum.conf 自动解决增加或删除rpm包时遇到的倚赖性...
  • 不知道大家有没有遇到过这种情况,当我们运行电脑或者将电脑借给别人,拿回来的时候电脑上就会出现很多自动安装软件,每次都要一个个的将它们卸载,真的是太麻烦了,今天就教教大家如何设置电脑不自动安装软件,一...
  • 在很多的情况下,我们需要把多个PDF文件合并,形成一个“合订本”,并以文件名作为目录,方便阅读,如何才能做到呢?下面将详细介绍实现这种功能的方法。 一、工具准备 首先我们到网上下载一个小工具“PDF批量目录...
  • 本文以在一host 上安装2版本的oracle数据库(oracle 10g/11g)为例,做一简单的介绍。   系统环境使用的是ol5.8,采用oracle-validate-rpm来自动配置oracle的系统环境。 安装路径需要手工创建,在这里需要...
  • 通过它们提供的资源和工具,你才能够以完全自动化的方式在你的计算机上下载和安装软件。但是,尽管付出了很的努力,包维护者仍然没法照顾好每种情况,也不可能将所有的可用软件都打包进去。因此,仍然存在需要你...
  • 首先打开你们已经安装好的自动执行文件备份的软件FileYee,很时候,我们工作忙起来很时候顾不上去手动对各个文件夹进行备份。这时候我们最好借助一些辅助工具对这些资料文件进行备份处理,就会安心省心很,电脑...
  • 本文最先发布在:如何在 CentOS 8 上安装 VirtualBox 客户机扩展程序​www.itcoder.techVirtualBox 是开源的,跨平台虚拟化软件,它允许你同时运行多个客户操作系统(虚拟机)。VirtualBox 提供了一系列驱动和应用...
  • 针对这问题,小编给大家整理了联想笔记本安装系统的详细步骤1、首选需要下载装机吧一键重装软件,官网下载地址: 2、 下载完成后,退出电脑所有运行软件,然后打开运行装机吧一键重装系统软件3、然后我们点击页面...
  • 一、问题的提出目前的很数据库应用程序是使用ORACLE数据库开发的client/server模式。众所周知,使用此种模式需要在终端上安装ORACLE客户端软件。...这样当软件发布时,可能需要在不同地点的成千上万终...
  • 如今企业中win7的客户端越来越了,但是我们大部分win7装完后都会创建一新用户,这新用户往往是权限不大,在我们需要安装某些软件时要用管理员权限才可以,由其是批量安装时(如果是单台的话就不用这么麻烦了)...
  • 驱动安装完成后,桌面会出现两快捷方式图标 1) 双击J-Flash ARM V4.34下载软件,打开如下界面 2) 工具栏中选择options-project settings,进行工程设置。 3) 按照如下图所示,设置各项 General选项卡: ...
  • 我将使用Better:trade_mark:系统默认值,首选项,软件配置来更新您的MacOS计算机,甚至自动安装一些方便的开发工具和应用程序,这些对我的开发人员朋友有帮助。 您不需要预先安装或配置任何东西! 它可以与工厂生产...
  • 如今,在较高版本的Windows系统中已经默认不在自动安装.NET Framework 3.5版本了,而有些软件又会要求我们的系统具有这版本的.NET Framework。对于这种情况,我们就需要自行安装这版本的.NET Framework。 对于...
  • 在这种工作方式下,服务器的安装、初始化,软件部署、服务发布和监控都是通过手动方式来完成的,需要运维人员登录到服务器上,一台一台去管理和维护。这种非并发的线性工作方式是制约效率的最大障碍。同时,因为手动...
  • 概述Expect是一用来实现自动交互功能的软件套件,使用它系统管理员可以创建脚本用来实现对命令或程序提供输入,而这些命令和程序是期望从终端(terminal)得到输入,一般来说这些输入都需要手工输入进行的。当你在...
  • 电脑自动捆绑软件,怎么办?

    千次阅读 2020-01-07 18:03:16
    捆绑软件指用户安装一个软件时,该软件会自动安装单个或多个软件。安装时是静默安装,并没有告诉用户是否要安装这个软件。那么如何防止自动捆绑软件呢? 1、同时按下“Win + R”键,也就是执行“运行”命令,在出现...
  • 电脑用久了大家都会发现开机速度会...软件系统一、系统优化优化Win10开机启动项如今很电脑软件安装后,都会开机自动启动,这会严重拖慢Win10开机速度,因此优化第一步可以将一些不需要开机启动的软件通通禁用...
  • 如何安装ELK(linux)

    2021-01-20 13:13:38
    它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,数据源,自动搜索负载等。 Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,174
精华内容 469
关键字:

如何自动安装多个软件