2009-03-09 16 views
1

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.

Yani benim sorudur
// 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. = (

cevap

2

Eğer yükleyici bitinceye kadar ve bundan sonra beklemek ne - kullanıcı ana süreç iptal edip etmediğini - Eğer un yüklemek o hemen

Ben bir kez daha biliyorum? Tüketici süreci, ancak temiz ve kolaydır,

İlgili konular