zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    IDEA开发 Scala 项目
    mvn编译时绕过本地jar去maven仓库下载问题
    三角化(转载)
    分布式文件服务器介绍(转载)
    VSCode 设置侧边栏字体大小
    libLas编译
    OSG编译
    vcpkg.exe安装与应用
    OpenCASCADE编译
    gl2ps编译
  • 原文地址:https://www.cnblogs.com/juin/p/2576957.html
Copyright © 2011-2022 走看看