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

Benutzerrechte editieren


6 replies to this topic

Tlorenzo

Tlorenzo
  • Full Members
  • 34 posts

Posted 08 July 2010 - 13:28

Hallo Leute,

ich möchte der Gruppe "Benutzer" gerne die Berechtigung "Ändern" auf mein Installationsverzeichnis zuweisen. Bisher habe ich solche Aktionen mit "cacls.exe" durchgeführt.

Leider heißt die Gruppe unter einem englischsprachigem OS "Users". Nun muss ich mir ein Batch-Skript basteln, was zunächst die vorhandenen lokalen Gruppen überprüft und anschließend die Berechtigungen setzt.

Gibt es hierfür eine elegantere Lösung?

Ich verwende InstallShield 2008 und als Zielsysteme ist von Windows XP bis Windows Server 2008 R2 alles vertreten.

Vielen Dank.

Gruß,
tlorenzo

Edited by Tlorenzo, 08 July 2010 - 13:28.


Maharani

Maharani
  • Full Members
  • 50 posts

Posted 09 July 2010 - 08:36

Hallo,

die Benutzergruppen haben - zumindestens unter Vista - nicht nur den Namen, sondern auch eine sprachunabhängige SID (Security ID).
Wir setzen unter Vista die Nutzerrechte mit icacls.exe (cacls ist veraltet und sollte unter Vista nicht mehr verwendet werden. Im worst case musst Du verschiedene Programmzweige fuer XP bzw. Vista und höher schreiben):

CODE
 
// icacls kann nicht mit Gaensefuesschen um Dateinamen                
// umgehen, darum wechseln wir mal temporaer das Verzeichnis
// ACHTUNG: NICHT LaunchAppAndWait benutzen, das haengt das
// CurrentDirectory automatisch um!!!
GetCurrentDir(szCurrent);    
ChangeDirectory(szDir);
 
szCmd = WINSYSDIR ^ "icacls";
szCmdArgs = ". /grant *S-1-5-32-545:f /T";
LaunchApplication(szCmd, szCmdArgs, szDir, SW_MINIMIZE, 20000, LAAW_OPTION_USE_SHELLEXECUTE | LAAW_OPTION_WAIT);
     
ChangeDirectory(szCurrent);    


Das Snippet setzt Schreibrechte fuer die Gruppe User auf dem Verzeichnis szDir.

Die Aufzählung aller vordefinierten SIDs gibt's bei Microsoft oder in übersichtlicherer Form und auf deutsch unter gruppenrichtlinien.de.

Hoffe, dass das zumindestens eine Idee für die Lösung Deines Problems liefert
Gruss
Rita


Tlorenzo

Tlorenzo
  • Full Members
  • 34 posts

Posted 09 July 2010 - 14:41

Danke für den Tipp.

Ich habe mir jetzt ein Batchskript erstellt, in dem ich das OS überprüfe und anschließend entweder cacls.exe oder icacls.exe ausführe. Das Skript ist unter "Support-Dateien" abgespeichert. Nun benötige ich in diesem Skript als %1 das Installationsverzeichnis.

Wie kann ich das Skript aus den Support-Dateien aufrufen und das Installationsverzeichnis als Parameter übergeben?

Maharani

Maharani
  • Full Members
  • 50 posts

Posted 13 July 2010 - 20:51

QUOTE (Tlorenzo @ 2010-07-09 15:41)
Danke für den Tipp.

Ich habe mir jetzt ein Batchskript erstellt, in dem ich das OS überprüfe und anschließend entweder cacls.exe oder icacls.exe ausführe. Das Skript ist unter "Support-Dateien" abgespeichert. Nun benötige ich in diesem Skript als %1 das Installationsverzeichnis.

Wie kann ich das Skript aus den Support-Dateien aufrufen und das Installationsverzeichnis als Parameter übergeben?

Warum willst Du ein Batch-Skript nehmen, statt einfach wie im Code-Beispiel LaunchApp?
Ansonsten kannst Du eigene Batch-Files mit LaunchApp oder LaunchAppAndWait aufrufen, Parameter uebergibst Du einfach mit szCmdArgs, siehe Hilfe.

Gruss
Rita


Tlorenzo

Tlorenzo
  • Full Members
  • 34 posts

Posted 14 July 2010 - 09:50

Danke.

Ich verwende ein Skript zum Prüfen des OS und ob ich cacls oder icacls verwende. Bei cacls kann ich nur Gruppennamen und keine SID verwenden. Da die Gruppe "Benutzer" je nach Sprache "Benutzer" oder "Users" heißt, muss ich auch das Skript entsprechend anpassen.

Das ist meiner Meinung nach mit Batch einfacher als per InstallScript.

Das mit dem Kommtar weiß ich, aber irgendwie bekommt ich die Variable INSTALLDIR nicht richtig aufgelöst. Wie kann ich den Inhalt aus INSTALLDIR übergeben? Kannst du bitte mal ein Beispiel machen. Danke.

Edited by Tlorenzo, 14 July 2010 - 10:23.


Tlorenzo

Tlorenzo
  • Full Members
  • 34 posts

Posted 15 July 2010 - 15:49

Mein Batch-Skript "test.bat" ist unter Support-Dateien > Sprachenunabhängig abgelegt.

Ich habe dir Ursache für mein Problem gefunden, leider jedoch noch keine Lösung. Beim Debuggen ist mir aufgefallen, dass die Variable SUPPORTDIR in ein falsches Verzeichnis verweist.


CODE
function ExFn_LaunchApp(hMSI)
STRING szCmd, szCmdArgs;
begin
szCmd = SUPPORTDIR ^ "test.bat";                                
szCmdArgs = INSTALLDIR;
   
    LaunchApplication(szCmd, szCmdArgs, "", SW_MINIMIZE, 20000, LAAW_OPTION_USE_SHELLEXECUTE | LAAW_OPTION_WAIT);
end;


In diesem Beispiel wird das Batch-Skript bei der Installation unter {111111} entpackt. Das Installscript löst SUPPORTDIR in {222222} auf. In diesem Verzeichnis befindet sich z.B. die Datei "ISBEW64.exe".

Sollte SUPPORTDIR nicht das Verzeichnis von Support-Dateien ausgeben?

MfG
tlorenzo

Edited by Tlorenzo, 15 July 2010 - 15:49.


vschober@gesytec.de

vschober@gesytec.de
  • Full Members
  • 19 posts

Posted 08 February 2011 - 15:28

Ich benutze Setacl.exe zum sprachunabhängigen Setzen der Benutzerrechte.
Setacl.exe gibt es von http://helgeklein.com/ und muss im Setup mit distributiert werden.
Hier sind als Beispiel der sprachabhängige Aufruf mit cacls und der sprachunabhängige Aufruf mit setacl, um ein Verzeichnis für alle Mitglieder der Gruppe Users mit Schreibrechten zu versehen:
QUOTE
cacls "X:\Profiles\All Users\Application Data\Test" /e /g BUILTIN\Users:c
setacl -on "d:\Profiles\All Users\Application Data\Test" -ot file -actn ace -ace "n:S-1-5-32-545;p:change;s:y"

Eine Liste der SIDs gibt es unter http://support.microsoft.com/kb/243330.
Im InstallShield verwende ich folgendes Codefragment:
CODE
TextSubGetValue ( "<APPLICATION_DATA_DIR>", szAppPath, FALSE, FALSE);
TextSubGetValue ( "<DISK1TARGET>", szCmd, FALSE, TRUE);
szCmd = szCmd ^ "setacl";
szParam = "-on \"" + szAppPath + "\" -ot file -actn ace -ace \"n:S-1-5-32-545;p:change;s:y\"";
nResult = LaunchAppAndWait(szCmd, szParam,
 LAAW_OPTION_WAIT //| LAAW_OPTION_SET_BATCH_INSTALL
 | LAAW_OPTION_HIDDEN | LAAW_OPTION_SHOW_HOURGLASS);

Mfg
VS