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


    1、定义数据库信息常量
     
    ; ------ 附加数据库用到的常量 ------
    !define DB_NAME "Test"
    !define DB_FILE_MDF "$INSTDIR\db\Test_Data.MDF"
    !define DB_FILE_LDF "$INSTDIR\db\Test_Log.LDF"
     

    2、安装时附加数据库

     
    ;程序文件
    Section "MainSection" SEC01
     
    ; ------ 附加数据库 ------
    ;判断数据库是否已经附加,如果没有附加,则附加数据库
    ClearErrors
    ;从注册表中读取SQL安装程序路径
    ReadRegStr $R1 HKLM "SOFTWARE\Microsoft\Microsoft SQL Server\80\Tools\ClientSetup" "SQLPath"
    ;从注册表中读取当前电脑的名称
    ReadRegStr $R2 HKLM "SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" "ComputerName"
    ;将附加数据库的命令写入到文本中
    FileOpen $R3 "$INSTDIR\attach_db.sql" w
    FileWrite $R3 "exec sp_attach_db @dbname = N$\'${DB_NAME}$\', @filename1 = N$\'${DB_FILE_MDF}$\',@filename2=N$\'${DB_FILE_LDF}$\'"
    FileWriteByte $R3 "13"
    FileWriteByte $R3 "10"
    FileClose $R3
    ;利用临时文件存储执行SQL语句的运行结果
    GetTempFileName $R0
    DetailPrint "正在附加数据库..."
    DetailPrint "附加语句:exec sp_attach_db @dbname = N$\'${DB_NAME}$\', @filename1 = N$\'${DB_FILE_MDF}$\',@filename2=N$\'${DB_FILE_LDF}$\'"
    DetailPrint '附加文件:"$R1\Binn\isql.exe" -U "sa" -P "sa" -S "$R2\${DB_NAME}" -d master -i "$INSTDIR\attach_db.sql" -o "$R0" -b'
    ;无窗口执行CMD命令
    nsExec::ExecToLog '"$R1\Binn\isql.exe" -U "sa" -P "sa" -S "$R2" -d master -i "$INSTDIR\attach_db.sql" -o "$R0" -b'
    DetailPrint "附加数据库完成..."
    ; ------ 附加数据库 结束 ------
    SectionEnd
     
    Function .onInstSuccess
    ;删除附加数据库脚本文件
    Delete "$INSTDIR\attach_db.sql"
    FunctionEnd
     
     
    3、卸载时分离数据库并删除数据库文件
     
    /******************************
    * 以下是安装程序的卸载部分 *
    ******************************/
     
    Section Uninstall
     
    ; ------ 卸载时与数据库相关的操作 ------
    MessageBox MB_YESNO|MB_ICONQUESTION "是否同时删除数据库?(若您想保留,请点击“否”按钮)"IDNO NoDelete
    ;从注册表中读取SQL安装程序路径
    ReadRegStr $R1 HKLM "SOFTWARE\Microsoft\Microsoft SQL Server\80\Tools\ClientSetup" "SQLPath"
    ;从注册表中读取当前电脑的名称
    ReadRegStr $R2 HKLM "SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName" "ComputerName"
    ;将附加数据库的命令写入到文本中
    FileOpen $R3 "$INSTDIR\detach_db.sql" w
    FileWrite $R3 "USE master"
    FileWriteByte $R3 "13"
    FileWriteByte $R3 "10"
    FileWrite $R3 "GO"
    FileWriteByte $R3 "13"
    FileWriteByte $R3 "10"
    FileWrite $R3 "exec sp_detach_db @dbname = N$\'${DB_NAME}$\'"
    FileWriteByte $R3 "13"
    FileWriteByte $R3 "10"
    FileClose $R3
    ;利用临时文件存储执行SQL语句的运行结果
    GetTempFileName $R0
    DetailPrint "正在分离${DB_NAME}数据库..."
    ;无窗口执行CMD命令
    nsExec::ExecToLog '"$R1\Binn\isql.exe" -U "sa" -P "sa" -S "$R2" -d master -i "$INSTDIR\detach_db.sql" -o "$R0" -b'
    Sleep 500
    DetailPrint "数据库分离成功..."
    ; 删除数据库文件
    Delete ${DB_FILE_MDF}
    Delete ${DB_FILE_LDF}
    NoDelete:
    ClearErrors
    ; 删除数据库分离脚本文件
    Delete "$INSTDIR\detach_db.sql"
    ; ------ 卸载时与数据库相关的操作 结束 ------
    SetAutoClose true
    SectionEnd
  • 相关阅读:
    SpringBoot2.x整合JDBC及初始化data.sql和schema.sql脚本
    CentOS7安装docker以及错误解决
    Maven的scope属性作用域范围
    (转)排序算法之简单选择排序
    系统开发博客专栏
    IDEA启动报错Plugin Error Problems found loading plugins的解决办法
    Promise函数的使用
    (转)排序算法之希尔排序
    .net Core AJAX使用Header传递参数,以JsonResult返回信息
    MVC 扩展RadioButtonListFor和CheckBoxListFor
  • 原文地址:https://www.cnblogs.com/juin/p/2576957.html
Copyright © 2020-2023  润新知