3

私のアプリは ClickOnce を使用して内部的に展開されており、SQL Server 2005 Express の前提条件があります。

ユーザーを SQL Server 2008 R2 Express にアップグレードしたいと考えています。300 台すべてのラップトップに「触れる」必要のないオプションは何ですか?

私のアイデアは、理論上のみ、SQL Server Express の前提条件を完全に削除し、アプリに「アップグレード」プロンプトを配置して、ユーザーがそれをクリックするまで数日与えてから、SQL Server Express を前提条件として再追加することでした。新しいバージョン。

私はそれ以外の提案を受け入れていますが、これはうまくいくと思います。ただし、私の実際の質問は、「アップグレード」プロンプトをどのように達成できるかです。C# Winform アプリで SQL Server Express をアンインストールするにはどうすればよいですか?

ありがとう、

4

2 に答える 2

2

SQL Server 2008 R2 をサイレント インストールする方法については、このMSDN の記事を参照してください (しかし、代わりに 2012 を実行しないのはなぜですか? :)

簡単なチートは (私はこれを非高速版で行いましたが、同じプロセスである必要があります)、最初に手動アップグレードを実行して、構成と設定のすべての回答を収集し、実際のアップグレードを実行する直前に、最終ステップで一番下に応答 (ini) ファイルへのパスが表示されます (下の画像を参照)。キャンセルしてそのファイルを取得すると、次のようにコマンド ラインで実行できます。Setup.exe /ConfigurationFile=MyConfigurationFile.INI

ここに画像の説明を入力

テストが完了すると、バイナリと応答ファイルをユーザーの PC に取り込み、セットアップをサイレント モードで実行するプロセスを生成するものを作成できるはずです。もちろん、最初にユーザーが管理者であることを確認する必要があります。

アンインストールするには: のようなアンインストール オプションを使用してセットアップを実行します。「アンインストール パラメータSetup.exe /Action=Uninstall /FEATURES=SQL,AS,RS,IS,Tools /INSTANCENAME=MSSQLSERVER」セクションを参照してください。私の記憶がよければ、実際にはSetup.exe /Action=Uninstall /INSTANCENAME=MSSQLSERVERを実行して、削除したい特定のインスタンスのすべてを削除できますが、間違っている可能性があるため、最初にテストしてください

于 2012-06-14T18:56:10.193 に答える
0

私は、WinForms アプリケーションから SQL 2005 Express から SQL 2008 R2 Express へのアップグレードを自動化するために、同様の要件に取り組んでいます。

アップグレードを行うために実際に SQL 2005 をアンインストールする必要はありません。アンインストールする必要なく、2005 から 2008R2 に直接アップグレードできます。

私のコードは次のようになります(独自のものを簡素化して削除するために変更されています)...

try
{

    //First, find the version of the currently installed SQL Server Instance
    string sqlString = "SELECT SUBSTRING(CONVERT(VARCHAR, SERVERPROPERTY('productversion')), 0, 5)";
    string sqlInstanceVersion = string.Empty;                

    //_database was initialized elsewhere - it's from Enterprise Library
    using (DbCommand cmd = _database.GetSqlStringCommand(sqlString))
    {
        sqlInstanceVersion = cmd.ExecuteScalar().ToString();
    }

    if (sqlInstanceVersion.Equals(String.Empty))
    {
        //TODO throw an exception or do something else
    }

    //11.00 = SQL2012, 10.50 = SQL2008R2, 10.00 = SQL2008, 9.00 = SQL2005, 8.00 = SQL2000
    switch (sqlInstanceVersion)
    {
        case "11.00":
        case "10.50":
        case "10.00":
            //Log that the version is already up to date and return
            return;
        case "9.00":
        case "8.00":
            //We are on SQL 2000 or 2005, so continue with upgrade to 2008R2
            break;
        default:
            //TODO throw an exception for unsupported SQL Server version
            break;
    }

    string upgradeArgumentString = "/Q /ACTION=upgrade /INSTANCENAME={0} /ENU /IACCEPTSQLSERVERLICENSETERMS";
    string instanceName = "YourInstanceNameHere";
    string installerFilePath = AppDomain.CurrentDomain.BaseDirectory + "\\SQLEXPR_x86_ENU.exe"; 

    if (!File.Exists(installerFilePath))
    {
        throw new FileNotFoundException(string.Format("Unable to find installer file: {0}", installerFilePath));
    }

    Process process = new Process
    {
        StartInfo = { FileName = installerFilePath, Arguments = String.Format(upgradeArgumentString, instanceName), UseShellExecute = false }
    };

    process.Start();

    if (process.WaitForExit(SQLSERVER_UPGRADE_TIMEOUT))
    {
        //Do something here when the process completes within timeout.
        //Probably look at exit code, or whatever to determine if it was successful
    }
    else
    {
        //The process exceeded timeout.  Do something about it; like throw exception, or whatever
    }
}
catch(Exception ex)
{
    //Handle your exceptions here
}
于 2013-06-26T16:55:26.237 に答える