2013-08-22 33 views
2

我爲我的軟件創建了一個Windows安裝程序,它可以在所有Windows版本上與MS SQL 2008服務器結合使用。但是,隨着MS SQL 2012的推出,Windows Installer正在使用的帳戶(SYSTEM_LOCAL)默認已取消其「sysadmin」權限,因此無法直接從安裝程序運行SQL腳本 - 而無需客戶在運行安裝程序之前添加「sysadmin」角色。從MS SQL 2012上的Windows Installer運行SQL腳本

SQL腳本包含用於構建應用程序數據庫,設置CLR函數等的SQL命令。

在後面的代碼,我使用執行SQL下列標準方法從C#:

/// <summary> 
/// Execute the sql script from file 
/// </summary> 
/// <param name="serverName"></param> 
/// <param name="user"></param> 
/// <param name="password"></param> 
/// <param name="dbName"></param> 
/// <param name="Sql"></param> 
private void ExecuteSql(string serverName, string user, string password, string dbName, string Sql) 
{ 
    string connStr; 
    string userName = user.Trim(); 

    // Check if Integrated security is used 
    if (userName == "") 
    { 
     // Use integrated security 
     connStr = "Data Source=" + serverName + ";Initial Catalog=" + dbName + ";Integrated Security=True"; 
    } 
    else 
    { 
     // Use username and password 
     connStr = "Data Source=" + serverName + ";Initial Catalog=" + dbName + ";Integrated Security=False;User Id=" + user + ";Password=" + password; 
    } 

    using (SqlConnection conn = new SqlConnection(connStr)) 
    { 
     try 
     { 
      Microsoft.SqlServer.Management.Smo.Server server = new Microsoft.SqlServer.Management.Smo.Server(new ServerConnection(conn)); 
      server.ConnectionContext.ExecuteNonQuery(Sql); 
      Log("Succeeded"); 
     } 
     catch (Exception ex) 
     { 
      Log(ex.ToString()); 
     } 
    } 
} 

我想知道是否有運行從安裝我的SQL代碼,在MS使用的帳戶的某種其它方式SQL 2012具有足夠的權限來運行SQL命令。我查看了一些似乎在命令窗口中執行SQL的安裝程序,並且很可能使用允許SQL命令在SQL服務器上運行的帳戶運行這些命令窗口,但是我沒有弄清楚他們是如何做的。

任何提示,或幫助,將不勝感激讚賞。

對不起英文不好。

回答

1

我會考慮使用Windows安裝程序XML(WiX)或InstallShield來創作您的MSI。兩者都具有Windows Installer的模式/擴展,以便於在不必重新發明輪子的情況下對連接執行SQL腳本。

SqlDatabase Element (Sql Extension)

SQL Scripts View

最快寫入和最高質量的安裝程序是那些側重於哪些需要做,而不是如何去做。應該由框架提供繁重的工作,以提高可靠性和普通用戶體驗。