安装包在安装时,怎麽更改config文件?

解决方案 »

  1.   

    在安装程序时,输入数据库名、用户名、密码、数据库ip,安装完成之后config文件已经按输入的内容改好!
      

  2.   

    你可以做一个小应用程序,它的主要功能就是界面上有:数据库名、用户名、密码、数据库ip,确定,取消button等,供安装人员输入信息来修改web.config,做好后把它和你的安装包放在一起打包,安装完后,自动运行该小应用程序,然后输入修改web.config即可关于修改web.config的代码可以参考
    http://singlepine.cnblogs.com/articles/293683.html
      

  3.   

    我记得安装时,直接在界面输入数据库名、用户名、密码、数据库ip,安装完成之后就更改完config文件。
      

  4.   

    使用VS2005制作安装包。
    1. 在“新建项目”对话框的左侧树状图中选择“Other Project Types”->“Setup and Deployment”节点,在右侧选择“Web Setup Project”。
     
    2. 在Solution Explorer中在Solution上点右键,选择“Add”->“Existing Web Site”,将存放编译好的Web网站的文件夹加入Solution中。
     
    如果添加使用aspnet_compiler编译好的网站,有可能会出现下面的提示框,点击“是”就行。
     3. 再添加一个新的“Class Library”,名称“CreateDB”,用以创建数据库的操作。
     删除默认生成的“class1.cs”,在这个项目上点右键,选择“Add”->“New Item”,在弹出的对话框中选择“Installer Class”,点击OK。
     
    在类中添加如下代码:
      

  5.   

    private void ExecuteSql(string connectionString, string databaseName, string sql)
    {
    SqlConnection sqlConnection = new SqlConnection(connectionString);
    SqlCommand sqlCommand = new SqlCommand(sql, sqlConnection);
    try
    {
    sqlCommand.Connection.Open();
    sqlCommand.Connection.ChangeDatabase(databaseName);
    sqlCommand.ExecuteNonQuery();
    }
    catch (Exception exception)
    {
    throw exception;
    }
    finally
    {
    sqlCommand.Connection.Close();
    }
    }public override void Install(System.Collections.IDictionary stateSaver)
    {
    string server = this.Context.Parameters["server"];
    string database = this.Context.Parameters["dbname"];
    string user = this.Context.Parameters["user"];
    string password = this.Context.Parameters["pwd"];
    string targetDir = this.Context.Parameters["targetdir"]; try
    {
    string connectionString = String.Format("data source={0};user id={1};password={2};persist security info=false;packet size=4096",
    server, user, password); //create db
    ExecuteSql(connectionString, "master", "CREATE DATABASE " + database); //set user
    string setUserString = "sp_addlogin 'XXXXXX', 'XXXXXX', 'XXXXXX'";
    string setAccessString = "sp_grantdbaccess 'XXXXXX'";
    string setRole = "sp_addrolemember 'db_owner', 'XXXXXX'"; //create new user login
    try
    {
    ExecuteSql(connectionString, "master", setUserString);
    }
    catch { } //set default database
    try
    {
    ExecuteSql(connectionString, "XXXXXX", setAccessString);
    }
    catch { } //set read role
    try
    {
    ExecuteSql(connectionString, "XXXXXX", setRole);
    }
    catch { } //create table,store produce......
    Process osqlProcess = new Process();
    osqlProcess.StartInfo.FileName = targetDir + "osql.exe";
    osqlProcess.StartInfo.Arguments = String.Format(" -U {0} -P {1} -S {2} -d {3} -i {4}createdb.sql",
    user, password, server, database, targetDir);
    osqlProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
    osqlProcess.Start();
    osqlProcess.WaitForExit();
    osqlProcess.Close(); //add data
    osqlProcess.StartInfo.Arguments = String.Format(" -U {0} -P {1} -S {2} -d {3} -i {4}insertdata.sql",
    user, password, server, database, targetDir);
    osqlProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
    osqlProcess.Start();
    osqlProcess.WaitForExit();
    osqlProcess.Close(); }
    catch (Exception exception)
    {
    throw exception;
    } try
    {
    string configFile = targetDir + "/Web.config";
    if (!File.Exists(configFile))
    {
    throw new InstallException("没有找到配置文件。");
    } XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.Load(configFile); GC.Collect();
    File.Delete(configFile);
    GC.Collect(); foreach (XmlNode xmlNode in xmlDoc["configuration"]["connectionStrings"].ChildNodes)
    {
    if (xmlNode.Name == "add")
    {
    if (xmlNode.Attributes["name"].Value == "DBConnection")
    {
    xmlNode.Attributes["connectionString"].Value = String.Format("Data Source={0};Initial Catalog={1};Persist Security Info=True;User ID=XXXXXX;Password=XXXXXX",
    server, database);
    }
    if (xmlNode.Attributes["name"].Value == "UserManageServicesConnection")
    {
    xmlNode.Attributes["connectionString"].Value = String.Format("Data Source={0};Initial Catalog={1};Persist Security Info=True;User ID=XXXXXX;Password=XXXXXX",
    server, database);
    }
    }
    }
    xmlDoc.Save(configFile);
    }
    catch (Exception exception)
    {
    throw exception;
    }
      

  6.   

    4. 在“Web Setup Project”项目上点右键,选择“Add”->“Project Output”,选择Project“CreateDB”,选择“Primary Output”,点击OK。重复上述动作,将选择刚才添加的Web Site,选择“Content Files”,点击OK。
       5. 在“Web Setup Project”项目上点右键,选择“Add”->“File”,将创建数据库表、存储过程和视图的脚本createdb.sql加入。重复,将向数据表中添加基础数据的脚本insertdata.sql加入。重复,将程序osql.exe加入。
    6. 在“Web Setup Project”项目上点右键,选择“Add”->“Merge Module”,在弹出的对话框中选择“VC_User_CRT71_RTL_X86_---.msm”,点击OK。添加这个VC运行库是因为在一台干净的机器上测试的时候发现osql.exe这个程序需要这个库。 
    7. 在“Web Setup Project”项目上点右键,选择“Properties”,在弹出的对话框中可以设置一些安装程序的属性。点击按钮“Prerequisites”,在弹出的对话框中选中“.NET Framework 2.0”和“Windows Installer 3.1”,选中“Download prerequisites from the same location as my application”。这样就可以把这些组件和应用程序打包在一起,安装的时候自动检测并安装了。如果需要部署的计算机如果没有打过最新的补丁的话,是没有“Windows Installer 3.1”的,如果没有这个组件,“.NET Framework 2.0”是不能安装的。
       
    8. 在“Web Setup Project”项目上点右键,选择“View”->“Custom Actions”,在出现的树状图的节点“Install”上点右键,选择“Add Custom Actions”。在弹出的对话框中“Look in”中选择“Web Application Folders”,在下面选择“Primary output from CreateDB (Active)”,点击OK。
     9. 在“Web Setup Project”项目上点右键,选择“View”->“User Interface”,在出现的树状图节点“Install”的子节点“Start”上点击右键,选择“Add Dialog”,在弹出的对话框中选择“TextBoxes(A)”。
     
    在新添加的节点“TextBoxes (A)”上点击右键,选择“Properites Window”,依次设置Edit*Property属性为“CUSTOMTEXTA1”,“CUSTOMTEXTA2”,“CUSTOMTEXTA3”和“CUSTOMTEXTA4”。10. 在刚刚建立的“Primary output from CreateDB (Active)”节点上点右键,选择“Properties Window”,设置“CustomActionData”属性为“/dbname=[CUSTOMTEXTA1] /server=[CUSTOMTEXTA2] /user=[CUSTOMTEXTA3] /pwd=[CUSTOMTEXTA4] /targetdir="[TARGETDIR]\"”。