2

我已经为我的软件创建了一个 Windows 安装程序——它可以在所有 Windows 版本以及 MS SQL 2008 服务器上正常工作。但是,随着 MS SQL 2012 的引入,Windows 安装程序使用的帐户 (SYSTEM_LOCAL) 已默认撤销其“系统管理员”权限,因此我无法直接从安装程序运行 SQL 脚本 - 无需客户在运行安装程序之前添加“sysadmin”角色。

SQL 脚本包含用于构建应用程序数据库、设置 CLR 函数等的 SQL 命令。

在后面的代码中,我使用以下从 C# 执行 SQL 的标准方法:

/// <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 命令的帐户运行这些命令窗口,但是我未能弄清楚他们是怎么做的。

任何提示或帮助将不胜感激。

我很抱歉英语不好。

4

1 回答 1

1

我会考虑使用 Windows Installer XML (WiX) 或 InstallShield 来创作您的 MSI。两者都有 Windows Installer 的模式/扩展,以方便针对连接执行 SQL 脚本,而无需重新发明轮子。

SqlDatabase 元素(Sql 扩展)

SQL 脚本视图

最快的书面和最高质量的安装程序是那些专注于需要做什么而不是如何去做的人。框架应该提供繁重的工作,以提高可靠性和共同的用户体验。

于 2013-09-27T00:37:20.873 回答