Uygulama kurulumum sırasında, kullanıcı zaten var olan bir SQL Server 2005'i kullanmak istemiyorsa, yerel makineye yeni bir SQL Server Express 2005 örneği yükleme seçeneğine sahiptir. neden olursa olsun ağ.Programlı başlatmayı iptal etme SQL Server Express Yükleme
SQL Server yüklemesi isteğe bağlı olduğundan, yükleyicimin önkoşulu olarak buna sahip değilim. Bunun yerine, kurulum ortamımda sqlexpr32.exe
kurulumunu paketlerim ve otomatik bir yükleme gerçekleştirmek için programlamayı uygun komut satırı argümanlarıyla programlı olarak başlatırım. (Not:/qb komut satırı bayrağını kullanıyorum, böylece yükleme sessiz değil, kullanıcı arabirimini gösterir, ancak kullanıcı girdisini istemez). Ve herhangi birinin bilmek istediği durumlarda, SQL Server Express kurulumunu başlatmak için this Microsoft article'u takip ediyorum.
// All this runs on a background thread so the user
// can cancel my app's setup at any time
// Launch the installer
Process setupProcess = new Process();
setupProcess.StartInfo.FileName = "sqlexpr32.exe";
setupProcess.StartInfo.Arguments = " a bunch of command line args here";
setupProcess.StartInfo.UseShellExecute = false; // to avoid a shell window
setupProcess.Start();
// At this point the SQL Server installer is running
// Monitor the process on 2-second intervals:
while (!setupProcess.WaitForExit(2000))
{
if(WasCancelled) // flag that is set when the user cancels my app's setup
{
// This following line is my problem. Sending CloseMainWindow does not
// seem to work. The SQL Server installer just keeps running.
setupProcess.CloseMainWindow();
setupProcess.WaitForExit();
break;
}
}
// After this point I build a results report for the user.
// My app's installer does not yet quit even if it was canceled.
:
Bu yüklerim benim özel harekete yapıyorum budur nasıl olabilir ben 'sinyal' SQL Server yükleyici iptal etmek süreç ve çıkış?
Bu çizgi bir şey yapmak görünmüyor:
setupProcess.Close(); // This closes my handle. Not the target process.
Ve açıkçası ben olabileceği kadar sadece süreci öldürmek istemem:
setupProcess.CloseMainWindow();
Bu aynı zamanda çalışmıyor Kullanıcının makinesini istenmeyen bir durumda bırakarak, çok sayıda çöp dosyasıyla veya en kötü durumda, bozuk bir yüklemeyle.
Herhangi bir fikrin var mı? Anahtarlar göndermek veya kullanıcı tıklamalarını simüle etmek mi istiyorsunuz? Ya da umarım bir şey daha az hacky?
DÜZENLEME: Ben CloseMainWindow
çalışmıyor nedenini bulduk düşünüyorum
:
- I (
sqlexpr32.exe
) başlangıç süreci gerçekten SQLSunucusu Installer için UI gösteren biri değil Ancak, bir alt işlem olan sql sunucusunu gerçeksetup.exe
bir alt işlem olarak başlatır. Yani bu konu daha da zorlaşıyor. = (