卸载SQL Server Express 2005,然后在C#ClickOnce Winform应用程序中安装SQL Server 2008 R2 Express
我的应用程序是使用ClickOnce在内部部署的,并且具有SQL Server 2005 Express的先决条件 我想将用户的升级到SQL Server 2008 R2 Express。我有哪些选择不涉及“触摸”全部300台笔记本电脑 从理论上讲,我的想法是完全删除SQL Server Express预请求,在我的应用程序中添加“升级”提示,给用户几天时间单击它,然后将SQL Server Express重新添加为预请求,但作为新版本 我认为这会起作用,尽管我愿意接受其他建议。然而,我真正的问题是如何完成“升级”提示。如何在C#Winform应用程序中卸载SQL Server Express 谢谢,有关如何以静默方式安装SQL Server 2008 R2的信息,请参见本文(但为什么不改为2012?:) 一个快速的欺骗是(我用非express版本做了这件事,但应该是相同的过程)首先通过手动升级来收集配置和设置的所有答案,然后在执行实际升级之前,,在最后一步中,您应该在底部看到答案(ini)文件的路径(见下图),如果取消并获取该文件,可以在命令行中运行它,如卸载SQL Server Express 2005,然后在C#ClickOnce Winform应用程序中安装SQL Server 2008 R2 Express,c#,.net,winforms,clickonce,sql-server-express,C#,.net,Winforms,Clickonce,Sql Server Express,我的应用程序是使用ClickOnce在内部部署的,并且具有SQL Server 2005 Express的先决条件 我想将用户的升级到SQL Server 2008 R2 Express。我有哪些选择不涉及“触摸”全部300台笔记本电脑 从理论上讲,我的想法是完全删除SQL Server Express预请求,在我的应用程序中添加“升级”提示,给用户几天时间单击它,然后将SQL Server Express重新添加为预请求,但作为新版本 我认为这会起作用,尽管我愿意接受其他建议。然而,我真正的问
Setup.exe/ConfigurationFile=MyConfigurationFile.INI
测试完成后,您应该能够创建一些东西,将二进制文件和应答文件拉入用户的pc,并生成一个进程以静默模式运行安装程序。当然,您应该首先确保您的用户是管理员
要卸载:使用卸载选项运行安装程序,如
setup.exe/Action=Uninstall/FEATURES=SQL,AS,RS,IS,Tools/INSTANCENAME=MSSQLSERVER
,请参阅部分。如果我的记忆力很好,您实际上可以执行Setup.exe/Action=Uninstall/INSTANCENAME=MSSQLSERVER删除您希望删除的特定实例的所有内容,但我可能错了,因此,首先测试我正在处理一个类似的需求,即从WinForms应用程序自动从SQL 2005 Express升级到SQL 2008 R2 Express
实际上,您不必卸载SQL 2005来进行升级。您可以直接从2005升级到2008R2,无需任何卸载
我的代码看起来像这样(经过修改以简化和删除专有内容)
感谢这篇文章,有关于先卸载现有SQL 2005 Express实例的信息吗?这是我问题的核心。小更正:SQLServerExpress的默认实例名是
SQLEXPRESS
(ClickOnce引导程序使用默认实例名)。您可能还想添加/q
,以便安静地卸载。因此,卸载命令应该是Setup.exe/q/Action=uninstall/FEATURES=SQL,AS,RS,IS,Tools/INSTANCENAME=SQLEXPRESS
@JNK:无意冒犯,但我不同意,因为人们没有正确解释我的问题。可能是因为它的措词不好,但我问的是如何卸载SQL,然后在C#Winforms应用程序中安装更新版本的SQL。不确定,但我不相信DBA网站上有很多C#Winforms专家。
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
}