ASP。NET程序作安装包时,会遇上两个大问题,一是网站配置,二是数据库安装。几天研究后,写点心得
1.网站配置
有几个棘手的问题,1.新建站点,要分XP系统和WIN2000/2003系统,XP系统下的IIS只能是配置到默认站点或新建虚拟站点。2.设置站点路径。3.设置站点权限,如很多时候都需要写入权限。4.设置默认文档。5.设置ASP。NET版本
解决办法:使用微软给我们提供的好东西iisweb.vbs,所在路径:c:/windows/system32/iisweb.vbs。设置默认文档和权限可以用DirectoryEntry对象来解决。
- DirectoryEntry root = new DirectoryEntry(iis0);
- root.Properties["AccessWrite"][0] = true;
- root.Properties["DefaultDoc"].Value = "Default.aspx";
- root.CommitChanges();
2.数据库配置
使用ADO来解决这个问题,使用一个SQL工具,把数据库表、初始数据生成为SQL脚本,用ADO来执行脚本。而如果使用OSQL。EXE,会有文件大小的限制。如果需要使用简版数据库,可以统一把SQL实例建到./SQLEXPRESS,因为简版SQL连接必须使用./SQLEXPRESS.如果是企业版,还需要重启服务。如果需要使用自定义的SQL帐户,此时SQL还有一个问题,权限的问题,SQL2005默认不可以连接,这时需要修改注册表,使用混合认证。HKEY_LOCAL_MACHINE/Software/Microsoft/Microsoft SQL Server/MSSQL.1/MSSQLServer下修改键LoginMode 值2
- #region 初始化数据库
- private void ReStartSqlServer()
- {
- Process p = new Process();
- p.StartInfo.FileName = "cmd.exe";
- p.StartInfo.UseShellExecute = false;
- p.StartInfo.RedirectStandardInput = true;
- p.StartInfo.RedirectStandardOutput = true;
- p.StartInfo.RedirectStandardError = true;
- p.StartInfo.CreateNoWindow = true;
- p.Start();
- p.StandardInput.WriteLine("net stop mssql$sqlexpress");
- p.StandardInput.WriteLine("exit");
- p.WaitForExit();
- p.Close();
- p.Start();
- p.StandardInput.WriteLine("net start mssql$sqlexpress");
- p.StandardInput.WriteLine("exit");
- p.WaitForExit();
- p.Close();
- }
- public void CreateDbByExcuteSQL()
- {
- string connStr = @"server=./SQLEXPRESS;Initial Catalog=master;Integrated Security=SSPI";
- StringBuilder sb = GetSqlFile(physicaldir + @"DBDATA/createdatabase0.sql");
- try
- {
- ExecuteSql(connStr, sb.ToString());
- sb = this.GetSqlFile(physicaldir + @"DBDATA/createdatabase1.sql");
- ExecuteSql(connStr, sb.ToString());
- }
- catch (Exception ex)
- {
- throw ex;
- }
- }
- private int ExecuteSql(string connStr, string sql)
- {
- SqlConnection conn = new SqlConnection(connStr);
- SqlCommand cmd = new SqlCommand(sql, conn);
- conn.Open();
- try
- {
- return cmd.ExecuteNonQuery();
- }
- catch(Exception ex)
- {
- throw ex;
- }
- finally
- {
- conn.Close();
- }
- }
- private StringBuilder GetSqlFile(string pFileName)
- {
- StringBuilder sqlTemp = new StringBuilder();
- sqlTemp.Append(File.ReadAllText(pFileName, System.Text.Encoding.GetEncoding("GB2312")));
- return sqlTemp;
- }
- #endregion