杉宫竹苑工作室

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2103|回复: 0

安装时附加数据库、卸载时分离数据库

[复制链接]
发表于 2016-9-2 20:32:38 | 显示全部楼层 |阅读模式

正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1、定义数据库信息常量

  1. ; ------ 附加数据库用到的常量 ------
  2. !define DB_NAME "Test"
  3. !define DB_FILE_MDF "$INSTDIR\db\Test_Data.MDF"
  4. !define DB_FILE_LDF "$INSTDIR\db\Test_Log.LDF"
复制代码


2、安装时附加数据库


  1. ;程序文件
  2. Section "MainSection" SEC01

  3. ; ------ 附加数据库 ------
  4. ;判断数据库是否已经附加,如果没有附加,则附加数据库
  5. ClearErrors
  6. ;从注册表中读取SQL安装程序路径
  7. ReadRegStr $R1 HKLM "SOFTWARE\Microsoft\Microsoft SQL Server\80\Tools\ClientSetup" "SQLPath"
  8. ;从注册表中读取当前电脑的名称
  9. ReadRegStr $R2 HKLM "SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" "ComputerName"
  10. ;将附加数据库的命令写入到文本中
  11. FileOpen $R3 "$INSTDIR\attach_db.sql" w
  12. FileWrite $R3 "exec sp_attach_db @dbname = N$\'${DB_NAME}$\', @filename1 = N$\'${DB_FILE_MDF}$\',@filename2=N$\'${DB_FILE_LDF}$\'"
  13. FileWriteByte $R3 "13"
  14. FileWriteByte $R3 "10"
  15. FileClose $R3
  16. ;利用临时文件存储执行SQL语句的运行结果
  17. GetTempFileName $R0
  18. DetailPrint "正在附加数据库..."
  19. DetailPrint "附加语句:exec sp_attach_db @dbname = N$\'${DB_NAME}$\', @filename1 = N$\'${DB_FILE_MDF}$\',@filename2=N$\'${DB_FILE_LDF}$\'"
  20. DetailPrint '附加文件:"$R1\Binn\isql.exe" -U "sa" -P "sa" -S "$R2\${DB_NAME}" -d master -i "$INSTDIR\attach_db.sql" -o "$R0" -b'
  21. ;无窗口执行CMD命令
  22. nsExec::ExecToLog '"$R1\Binn\isql.exe" -U "sa" -P "sa" -S "$R2" -d master -i "$INSTDIR\attach_db.sql" -o "$R0" -b'
  23. DetailPrint "附加数据库完成..."
  24. ; ------ 附加数据库 结束 ------
  25. SectionEnd

  26. Function .onInstSuccess
  27. ;删除附加数据库脚本文件
  28. Delete "$INSTDIR\attach_db.sql"
  29. FunctionEnd
复制代码



3、卸载时分离数据库并删除数据库文件

  1. /******************************
  2. * 以下是安装程序的卸载部分 *
  3. ******************************/

  4. Section Uninstall

  5. ; ------ 卸载时与数据库相关的操作 ------
  6. MessageBox MB_YESNO|MB_ICONQUESTION "是否同时删除数据库?(若您想保留,请点击“否”按钮)"IDNO NoDelete
  7. ;从注册表中读取SQL安装程序路径
  8. ReadRegStr $R1 HKLM "SOFTWARE\Microsoft\Microsoft SQL Server\80\Tools\ClientSetup" "SQLPath"
  9. ;从注册表中读取当前电脑的名称
  10. ReadRegStr $R2 HKLM "SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" "ComputerName"
  11. ;将附加数据库的命令写入到文本中
  12. FileOpen $R3 "$INSTDIR\detach_db.sql" w
  13. FileWrite $R3 "USE master"
  14. FileWriteByte $R3 "13"
  15. FileWriteByte $R3 "10"
  16. FileWrite $R3 "GO"
  17. FileWriteByte $R3 "13"
  18. FileWriteByte $R3 "10"
  19. FileWrite $R3 "exec sp_detach_db @dbname = N$\'${DB_NAME}$\'"
  20. FileWriteByte $R3 "13"
  21. FileWriteByte $R3 "10"
  22. FileClose $R3
  23. ;利用临时文件存储执行SQL语句的运行结果
  24. GetTempFileName $R0
  25. DetailPrint "正在分离${DB_NAME}数据库..."
  26. ;无窗口执行CMD命令
  27. nsExec::ExecToLog '"$R1\Binn\isql.exe" -U "sa" -P "sa" -S "$R2" -d master -i "$INSTDIR\detach_db.sql" -o "$R0" -b'
  28. Sleep 500
  29. DetailPrint "数据库分离成功..."
  30. ; 删除数据库文件
  31. Delete ${DB_FILE_MDF}
  32. Delete ${DB_FILE_LDF}
  33. NoDelete:
  34. ClearErrors
  35. ; 删除数据库分离脚本文件
  36. Delete "$INSTDIR\detach_db.sql"
  37. ; ------ 卸载时与数据库相关的操作 结束 ------
  38. SetAutoClose true
  39. SectionEnd
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SgzyStudio

GMT+8, 2024-5-17 21:36 , Processed in 0.116983 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表