2011-04-11 17 views
5

Wix kullanarak oluşturulmuş bir yükleyicim var. Sql sunucusunun kurulu olduğu yeri belirtmek istiyorum. Düşünebildiğim bir çözüm, CreateDatabase komut dosyasına bir yer tutucu koymak ve çalışma zamanında yer tutucuyu, kullanıcının belirttiği gerçek yolla değiştirmektir.Wix: Belirtilen bir konumda bir sql sunucu veritabanı oluştur

Bunu yapmanın daha iyi bir yolu olup olmadığını merak ediyorum? Wix, kullanabileceğim bir şey sağlıyor mu? Standart WiX SQL extension yararlanabilirsiniz

+1

Bu problemi dinamik bir SQL kullanarak çözüyorum. Çözüm arayan herkes için lütfen şu soru için kabul edilen cevabı kontrol edin: http://stackoverflow.com/questions/5626850/sql-server-use-parameter-in-create-database – sean717

cevap

5

sayesinde. Örneğin, SqlString öğesi, yükleme zamanında yürütmek üzere bir SQL sorgusu belirtme seçeneği sunar. SqlDatabase öğesi, SQL veritabanı oluşturmak için kullanıma hazır bir seçenek sunar. Her ikisi de, sırasıyla @SQL ve @Server öznitelikleri için Windows Installer özelliklerini kabul eder. Bu, kullanıcı girdisi alabileceğiniz, mülke kaydedebileceğiniz ve Sql öğelerinde bu özelliği kullanabileceğiniz anlamına gelir.

0

.

SqlString'i kullanarak, bazı parametreler ve CREATE DATABASE'un doğrudan kullanımını belirttiğiniz gibi. Sen gerekir:

  • DB_SERVER
  • DB_INSTANCE
  • DB_PORT
  • DB_DATA_FOLDER
  • DB_LOG_FOLDER

Eğer tabii ki olacak, SQL kimlik doğrulama kullanmak bekliyoruz ayrıca gerek DB_USER/DB_PASS

Geçerim parametreleri doğrulamak için kendi özel işlemlerinizi yazmanızı öneririz.

  • Yerel makinede sunucu/örnek var mı? Her zaman bir SQL sunucusuna uzaktan bağlanabiliyor ve belirli bir sürücüdeki dosyaları yüklemesini söyleyebiliyor olsanız da, bu sürücüler hakkında önceden bir şeyleri doğrulamayı zorlaştırır.
  • Verilen Sunucu/Örnek/Bağlantı Noktası ve kimlik bilgilerini kullanarak sql server master DB'ye bağlanabilirsiniz, DB'yi önceden oluşturma iznini bile kontrol edebilirsiniz. Liman kullanmamanızdan kurtulabilirsiniz, ancak bazı DBA'lar hala gizlilikle güvenlik için gider.
  • Geçerli Veri/Günlük klasörleri verdiniz. Gerçekte var olan sürücüler için köklü yollar.
  • Veri/Log klasörü sürücüsünde yeterli alanın doğrulanması da iyi bir fikirdir. Çok büyük bir D: veri sürücüsü ile küçük C: sürücüsündeki veri dosyalarını kontrol etmeyen ve kontrol etmeyen bir çok müşteriye girdim. Genellikle bir bileşimi en az boş alanı yanı sıra asgari serbest yüzdesini (diskte örneğin en az% 25 boş alan) Yan'ın yanıta genişletilmesi
0

, Sql uzantısı kullanırsam çok basit bir yazım var yok - İhtiyacınız SQL veritabanınız için hem MDF hem de LDF (Data + Log dosyaları) dahildir, ancak daha sonra aynı dosya adını referans alarak bunları ekleyin.

şu bir sql express sunucu Ben kısalık için bu örnekten kimlik ihmal ettik

<Property Id="SQLINSTANCE" Value="SQLEXPRESS" /> 
<Property Id="SQLSERVER" Value="LOCALHOST" />  
<Property Id="DATA_FOLDER" Value="C:\Program Files\Microsoft SQL Server\MSSQL11.SQLExpress\MSSQL\DATA\" /> 

<Component Id="Sql_Database_Deploy" NeverOverwrite="yes" Directory="[DATA_FOLDER]"> 
    <File Source="Northwind.mdf"></File> 
    <File Source="Northwind)log.ldf"></File> 
    <sql:SqlDatabase Id="SqlDatabase" Database="Northwind" Server="[SQLSERVER]" Instance="[SQLINSTANCE]" CreateOnInstall="yes" DropOnUninstall="yes"> 
     <sql:SqlFileSpec Filename="[DATA_FOLDER]Northwind.mdf" Id="Northwind_SqlFileSpec"/> 
     <sql:SqlLogFileSpec Filename="[DATA_FOLDER]Northwind_log.ldf" Id="Northwind_SqlLogFileSpec"/> 
    </sql:SqlDatabase> 
    </Component> 

localhost \ sqlexpress örneğinin altında lokal olarak kurulacaktır varsayar, ama aynı zamanda bir SQL kullanıcı belirtebilirsiniz User öğesini kullanarak komut için kullanın ve SqlDatabase özniteliğinde Kullanıcı öğesinin kimliğine bakın.

İlgili konular