Jump to content


This is a ready-only archive of the InstallSite Forum. You cannot post any new content here. / Dies ist ein Archiv des InstallSite Forums. Hier können keine neuen Beiträge veröffentlicht werden.
Photo

SQLScript Text-Replacement funktioniert nicht wie erwartet


6 replies to this topic

Bandit2001

Bandit2001
  • Full Members
  • 16 posts

Posted 23 May 2014 - 07:37

Hallo,

 

wir haben eine Anwendung, die als Datenablage den SQLExpress benutzt.

Dieser wird mit unserem Setup mit installiert, allerdings ist es für unsere Anwendung notwendig, dass dieser mit dem System-Account läuft. Leider ist der Name des System-Accounts spachabhängig. Um dies zu kompensieren wird das MergeModul "SIDLookup" benutzt.

 

Soweit noch alles in Ordnung.

Zusätzlich werden durch das Setup per SQL-Script Datenbanken und Tabellen angelegt. Damit die Anwendung nun Zugriffsrechte auf die Datenbanken hat, wird zum Schluß folgendes Script ausgeführt:

USE GTIM
GO
sp_addsrvrolemember [LocalSystem],'sysadmin'

USE GTIP
GO
sp_addsrvrolemember [LocalSystem],'sysadmin'

USE GTIR
GO
sp_addsrvrolemember [LocalSystem],'sysadmin'

USE GTIDATA1
GO
sp_addsrvrolemember [LocalSystem],'sysadmin'

USE master
GO

Wobei "LocalSystem" durch den Namen des System-Account (sprachabhängig!) per Text-Replacement ersetz werden soll:

 

txtreplacee3u8x.png

 

Der Standard-Wert von [SID_SYSTEM] ist "NT-AUTORITÄT\SYSTEM".

 

Das Property [SID_SYSTEM] wird auch an einer anderen Stelle in einer CustomAction benutzt. Hier funktioniert auch das sprachabhängige benutzen des Wertes.

 

Nur beim SQL-Script wird immer [LocalSystem] durch [NT-AUTORITÄT\SYSTEM] ersetzt. Auf einem eglischen System gibt es daher auch immer eine Fehlermeldung dass der Benutzer nicht bekannt ist, und das Skript wird nicht ausgeführt.

 

Wo liegt jetzt hier mein Fehler, bzw. wie bekomme ich das hin dass das Skript korrekt ausgeführt wird?

Setup wird mit InstallShield 2013 Premier Edition erstellt.

 

 

mfg

R. Scheller


Edited by Bandit2001, 23 May 2014 - 14:01.


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 24 May 2014 - 08:50

Im Text Replacement muss der String genau so stehen wie im SQL Script. Du hast LocalSystem einmal mit eckigen Klammern und einmal ohne.

Ich bin nicht sicher, ob Windows Installer Properties in eckigen Klammern im SQL Script automatisch ersetzt werden (also auch ohne Text Replacement). Um Verwirrung zu vermeiden würde ich deshalb lieber ein anderes Zeichen verwenden als eckige Klammern, z.B. das Prozent-Zeichen. Ich würde auch vermeiden, vordefinierte Bezeichner zu verwenden wie LocalSystem. Mein Vorschlag deshalb:

Im Script:

sp_addsrvrolemember %SID_SYSTEM%,'sysadmin'

Im Text Replacement:

%SID_SYSTEM%    [SID_SYSTEM]



Bandit2001

Bandit2001
  • Full Members
  • 16 posts

Posted 26 May 2014 - 11:32

Muss ich eigentlich [SID_SYSTEM] explizit als Property definieren, oder genügt es wenn ich das MergeModul "Lookup wellknown SIDs" benutze?

 

Definiere ich [SID_SYSTEM] als Property, wird im SQL-Skript %SID_SYSTEM% durch den Default-Wert ersetzt.

Definiere ich [SID_SYSTEM] nicht als Property, bekomme ich beim Ausführen des Skripts während des Setup die Fehlermeldung dass der Name nicht NULL sein darf.

 

Funktionieren tut beides irgendwie nicht. :(



Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 26 May 2014 - 12:27

Hast du es leer vordefiniert oder mit einem Wert?

Normalerweise ist es icht erforderlich, Properties vorzudefinieren. Es genügt, sie zur Laufzeit zu setzen. Wenn du es mit einem Wert vordefinierst hast: Das wäre ein Hinweis darauf, dass das Merge Modul das Property nicht oder zum falschen Zeitpunkt setzt. Schreib doch mal ein Log und schau den Wert des Properties an wie er sich während der Auführung ändert..



Bandit2001

Bandit2001
  • Full Members
  • 16 posts

Posted 26 May 2014 - 12:43

Hallo,

 

  • Als erstes hatte ich das Property [SID_SYSTEM] mit dem Wert "NT Authorität\System" vordefiniert.
    Hier wurde im Skript immer %SID_SYSTEM% durch "NT Authorität\System" ersetzt.
  • Dann habe ich das Property wieder gelöscht, also gar nicht selbst definiert.
    Hier wurde im Skript immer %SID_SYSTEM% durch NULL ersetzt.

In beiden Fällen sieht es also so aus als ob das MergeModul zur falschen Zeit läuft.



Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 26 May 2014 - 15:55

Ja, so sieht es aus. Laut Doku zu SIDLookUp läuft die Custom Action direkt vor CreateFolders. Ich weiß nicht genau wann InstallShield die Textersetzungen durchführt, vermutlich in ISSQLServerInitialize (nach LaunchConditions) oder ISSQLServerCosting (vor InstallInitialize). Deshalb solltest du im SIDLookUp Merge Modul die Tabelle ModuleInstallExecuteSequence ändern, so dass die Custom Action möglichst am Anfang z.B. nach AppSearch ausgeführt wird.



Bandit2001

Bandit2001
  • Full Members
  • 16 posts

Posted 27 May 2014 - 09:13

Danke, mit dieser Änderung hat es jetzt funktioniert.