1、InstallShield如何.NET FrameWork打包到安装程序中?2、如何打包SQL数据库?脚本、备份文件、数据文件等方式均可。3、如何指定非wwwroot下的虚拟目录?4、如何定义安装组件?

解决方案 »

  1.   

    2.建立数据库
    在建立数据的时候需要先准备好脚本.使用osql运行。string currentDir = @"C:\WINNT\Microsoft.NET\Framework\v1.1.4322";
    string sqlPath = @"C:\Program Files\Microsoft SQL Server\80\Tools\Binn";//建立目录
    if(!Directory.Exists(@"C:\Program Files\Microsoft SQL Server\MSSQL\Data"))
    {
       Directory.CreateDirectory(@"C:\Program Files\Microsoft SQL Server\MSSQL\Data");
    }if(!Directory.Exists(strTemp+@"DbAdmin\Database Backup"))
    {
       Directory.CreateDirectory(strTemp+@"DbAdmin\Database Backup");
    }System.Diagnostics.Process.Start("CMD.exe","/c net  start  MSSQLSERVER");RegistryKey pregkey ;
    pregkey = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Services\ASP.NET_1.1.4322\Performance",true);
    try
    {
       currentDir = pregkey.GetValue(@"Library").ToString();
       currentDir = currentDir.Substring(0,currentDir.LastIndexOf(@"\"));
       Directory.SetCurrentDirectory(currentDir);
       System.Diagnostics.Process.Start("CMD.exe","/c aspnet_regiis.exe -i");
    }
    catch{}
    pregkey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server\80\Tools\ClientSetup",true);
    try
    {
       sqlPath = pregkey.GetValue(@"SQLPath").ToString();
       sqlPath = sqlPath+ @"\Binn";
    }
    catch{}
    pregkey.Close();

    //运行脚本部分   
    StreamWriter dbFile = new StreamWriter(strTemp+"db.sql");
    dbFile.WriteLine("use master");
    dbFile.WriteLine("if exists(select * from sysdevices where name='table1')");
    dbFile.WriteLine("Exec sp_dropdevice "+"'"+Database+"'");
    dbFile.WriteLine("else");
    dbFile.WriteLine("Exec sp_addumpdevice 'disk',"+"'"+Database+"'"+",");
    dbFile.WriteLine(@"'C:\Program Files\Microsoft SQL Server\MSSQL\Data\table1_Data.mdf'");
    dbFile.WriteLine("restore database "+Database+" from disk='"+strTemp+"table1.bak' with ");
    dbFile.WriteLine(@"move 'Cipacedb_New_Data' to 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\table1_Data.mdf',");
    dbFile.WriteLine(@"move 'Cipacedb_New_Log' to 'C:\Program Files\Microsoft SQL Server\MSSQL\Data\table1_Log.ldf',");
    dbFile.WriteLine("replace");
    dbFile.WriteLine("go");Directory.SetCurrentDirectory(sqlPath);
    System.Diagnostics.Process sqlProcess = new System.Diagnostics.Process();
    sqlProcess.StartInfo.FileName = "osql.exe";
    sqlProcess.StartInfo.Arguments = string.Format(" -U {0} -P {1} -d {2} -i {3}db.sql", UserID, Password, "master", strTemp);
    sqlProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
    sqlProcess.Start();
    sqlProcess.WaitForExit();
    sqlProcess.Close();
    if(File.Exists(strTemp+"db.sql"))
    {
       File.Delete(strTemp+"db.sql");
    }
    if(File.Exists(strTemp+"table1.bak"))
    {
       File.Delete(strTemp+"table1.bak");
    }
      

  2.   

    安装程序可以检查是否需要.net FrameWork,如果没就提示用户是否要运行,把.net FrameWork放在同一个目录里面最后生成exe就可以了。
      

  3.   

    还需要一个插件。
    http://www.webjx.com/htmldata/2005-10-05/1128470829.html
      

  4.   

    安装数据库,msdn里有个例子,不过是针对msi的,其中的思路可以借鉴:
    使用 Visual Studio .NET 进行开发-->部署应用程序和组件-->部署演练-->演练:安装期间使用自定义操作创建数据库
      

  5.   

    到这个论坛上找http://installshield.jaron.cn/Forum/InstallShield中文论坛使用InstallShield,从Releases,然后找到.NET FrameWork Location,选择为Extract Frome Setup.exe,记住,要下载.NET FrameWork 安装包
    SQL备份等,可以选择使用SQL Script,里头有向导,很好用,不需要你处理任何的代码
    自定义安装组件,在Organization中的Features创建即可,每一个Feature都可以创建InstallShield Script的事件,记住,是事件,就很容易明白了吧使用InstallShield Script创建虚拟目录和数据库等//////////////////////////
    // 创建IIS站点
    //////////////////////////
    function CreateWebSite(szServerIPDefault,szServerPortDefault)
    STRING szCmdLine,szWaitTxt;
    begin
    if ((szServerIPDefault = "") || (szServerPortDefault = "")) then 
    MessageBox ("您没有设定"+@PRODUCT_NAME+"运行的服务器IP地址或端口!!IIS信息服务设置失败!\n请自行创建IIS站点,并将主目录设为:"+TARGETDIR,SEVERE);
    else
    szWaitTxt=" 正在创建IIS和设置站点....";
    SdShowMsg (szWaitTxt, TRUE);
    Delay(2);
    szCmdLine = SUPPORTDIR ^"mkw3site.vbs"+" -r "+TARGETDIR+" -i "+szServerIPDefault+" -o "+szServerPortDefault+" -t "+@PRODUCT_NAME; 
    if (LaunchAppAndWait("WScript.exe", szCmdLine,WAIT) < 0) then
    MessageBox ("不能建立WEB 虚拟目录,没有找到 WScript.exe 或执行脚本错误.",SEVERE);
    endif;
    SdShowMsg (szWaitTxt, FALSE);
    endif;
    return 0;
    end;//////////////////////////
    // 创建虚拟目录
    //////////////////////////
    function CreateVirtualDir(VirtualFolder)
    STRING szCmdLine,szWaitTxt;
    begin
    if (VirtualFolder = "") then 
    MessageBox ("没能读取到虚拟目录的名称!请联系系统供应商!"+TARGETDIR,SEVERE);
    else
    szWaitTxt=" 正在创建"+@PRODUCT_NAME+"的虚拟目录....";
    SdShowMsg (szWaitTxt, TRUE);
    Delay(2);
    szCmdLine = SUPPORTDIR ^"mkwebdir.vbs "+" -w 1 -v \""+VirtualFolder+"\",\""+ TARGETDIR+"\"" ;
    if (LaunchAppAndWait("WScript.exe", szCmdLine,WAIT) < 0) then
    MessageBox ("不能建立WEB 虚拟目录,没有找到 WScript.exe 或执行脚本错误.",SEVERE);
    endif;
    SdShowMsg (szWaitTxt, FALSE);
    endif;
    return 0;
    end;//////////////////////////
    // 创建和优化数据库
    //////////////////////////
    function CreateDataBase(svSQLsvr,svSQLusr,svSQLpwd)
    STRING szCmdLine,szWaitTxt;
    begin
    szWaitTxt=" 正在创建"+@PRODUCT_NAME+"所需数据库....";
    SdShowMsg (szWaitTxt, TRUE);
    Delay(2); 
    szCmdLine = "/U "+svSQLusr+" /P "+svSQLpwd+" /S "+svSQLsvr+" /Q \"exec sp_attach_db N'OASystem' , N'"+SUPPORTDIR ^"OASystem_data.mdf'\"";
    if (LaunchAppAndWait("osql.exe", szCmdLine,WAIT) < 0) then
    MessageBox ("数据库创建失败!请确您的系统中已安装 Microsoft SQL Server 2000.\n如仍无法解决,请联系系统供应商!",SEVERE);
    endif;
    SdShowMsg (szWaitTxt, FALSE);
    szWaitTxt=" 正在优化"+@PRODUCT_NAME+"系统数据库....";
    SdShowMsg (szWaitTxt, TRUE);
    Delay(2); 
    szCmdLine = "/U "+svSQLusr+" /P "+svSQLpwd+" /S "+svSQLsvr+" /Q \"use OASystem ; exec sp_updatestats\"";
    if (LaunchAppAndWait("osql.exe", szCmdLine,WAIT) < 0) then
    MessageBox ("数据库优化失败!您可以在 sql查询分析器中执行 \n use OASystem ; exec sp_updatestats \n完成!",SEVERE);
    endif;
    SdShowMsg (szWaitTxt, FALSE);
    return 0;
    end;