トップ回答者
VisualStudio2008でのセットアッププロジェクトについて

質問
-
はじめまして。
現在、VisualStudio2008を使用してセットアップを作成しており、
以下のことを実現したいのですが、うまくいかず困っております。
【実現したい事】
1.セットアップ時にSQLServer2005 ExpressEditionもインストールしたい。
※ 必須コンポーネントにチェックを入れ試したのですが、ManagementStudioしかインストールされませんでした。
2.SQLServer認証を有効にしたい。
3.SQLServerのバックアップファイルをセットアップ時に復元したい。
【開発環境】
OS:WindowsXP SP3
色々とサイトを調査したのですが、解決できずに困っております。
どなたか作成方法をご存知の方いらっしゃいませんでしょうか?
回答
-
VBSからSMOを操作してパスワード設定するなら、こんな感じ
Dim svr set svr=CreateObject("Microsoft.SqlServer.Management.Smo.Server") Dim settings set settings=svr.Settings Dim modeText select case settings.LoginMode case 0 modeText="Normal" case 1 modeText="Integrated" case 2 modeText="Mixed" case 9 modeText="Unknown" end select if (settings.LoginMode<>2) then settings.LoginMode=2 end if 'Dim col 'dim col 'set col=CreateObject("System.Collections.Specialized.StringCollection ") '作成できない 'col.Add("C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Test.mdf") 'call svr.AttachDatabase("Test",col) Dim login for each login in svr.Logins if login.Name="sa" then Call login.ChangePassword("****") Call login.Enable() end if next
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)- 回答としてマーク shino555 2011年8月5日 7:58
すべての返信
-
カスタム動作でSQLServer認証を有効にしたり復元の動作を実行すればいいのではないでしょうか。
たとえばVBSのようなスクリプトからosql.exeやsqlcmd.exeを呼び出してT-SQLで設定するとか。
あるいはカスタム動作で、SQL Server Managemento Object(SMO)をつかうとしたら、
Microsoft.SqlServer.Management.Smo.Server svr = new Microsoft.SqlServer.Management.Smo.Server(); svr.Settings.LoginMode = Microsoft.SqlServer.Management.Smo.ServerLoginMode.Mixed; System.Collections.Specialized.StringCollection col = new System.Collections.Specialized.StringCollection(); col.Add(@"C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Test.mdf"); svr.AttachDatabase("DatabaseName", col);//アタッチの場合
みたいにするとか。
#VBSからSMO呼んだらStringCollectionsが使えなかったorz
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!) -
VBSからSMOを操作してパスワード設定するなら、こんな感じ
Dim svr set svr=CreateObject("Microsoft.SqlServer.Management.Smo.Server") Dim settings set settings=svr.Settings Dim modeText select case settings.LoginMode case 0 modeText="Normal" case 1 modeText="Integrated" case 2 modeText="Mixed" case 9 modeText="Unknown" end select if (settings.LoginMode<>2) then settings.LoginMode=2 end if 'Dim col 'dim col 'set col=CreateObject("System.Collections.Specialized.StringCollection ") '作成できない 'col.Add("C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\Test.mdf") 'call svr.AttachDatabase("Test",col) Dim login for each login in svr.Logins if login.Name="sa" then Call login.ChangePassword("****") Call login.Enable() end if next
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)- 回答としてマーク shino555 2011年8月5日 7:58
-
ご回答ありがとうございます。
gekka様のような方法ではうまくできなかった為(スキルが足りない為に。。。)、
以下のようにしました。
Option Explicit
'=======================================
' 定数定義
'=======================================
Const SQLSERVER_SERVICE = "MSSQLSERVER"
Const LOGIN_SERVER = "LOCALHOST\SQLEXPRESS"
Const SETTING_FILE = ".\sa.sql"
Const CREATE_FILE = ".\create.sql"'=======================================
' 変数定義
'=======================================
Dim WshShellSet WshShell = WScript.CreateObject("WScript.Shell")
'=======================================
' saユーザ有効化
'=======================================
Call WshShell.Run("sqlcmd -E -S " & LOGIN_SERVER & " -i " & SETTING_FILE, 0, True)'=======================================
' データベース作成
'=======================================
Call WshShell.Run("sqlcmd -E -S " & LOGIN_SERVER & " -i " & CREATE_FILE, 0, True)'=======================================
' SQLServer認証モード変更
'=======================================
WshShell.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\MSSQLServer\LoginMode", 2, "REG_DWORD"'=======================================
' TCP/IP有効化
'=======================================
WshShell.RegWrite "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.1\MSSQLServer\SuperSocketNetLib\Tcp\Enabled", 1, "REG_DWORD"'=======================================
' SQLServer再起動
'=======================================
Dim objServiceCall MsgBox("停止処理を行います")
For Each objService In GetServices()
Call objService.StopServiceDo Until ChkServiceState("Stopped")
Call WScript.Sleep(100)
Loop
NextCall MsgBox("停止処理が完了したので、起動処理を行います")
For Each objService In GetServices()
Call objService.StartServiceDo Until ChkServiceState("Running")
Call WScript.Sleep(100)
Loop
Next
Call MsgBox("起動処理完了")'=======================================
' 関数
'=======================================
Function GetServices()
Dim l_strSQL
l_strSQL = "SELECT * FROM WIN32_SERVICE WHERE Caption = '" & SQLSERVER_SERVICE & "'"
Set GetServices = GetObject("winmgmts:").ExecQuery(l_strSQL)
End FunctionFunction ChkServiceState(p_Status)
Dim objServiceChkServiceState = False
For Each objService In GetServices()
ChkServiceState = CBool(objService.State = p_Status)
Next
End Function明日これをセットアップに組み込んでみようかと思います。