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

Adminrechte unter Vista im Script


7 replies to this topic

bigmasa

bigmasa
  • Full Members
  • 3 posts

Posted 04 June 2007 - 10:55

Moin,

ich benutze IS12 und erstelle ein Basic MSI Setup ohne Setup.exe da die meisten Kunden keine Zusatzdatei haben wollen. Das Setup funktioniert unter allen Betriebsystem einwandfrei bis auf Vista natürlich.

Das das Hauptprogramm unterschiedliche Konfigurationen enthalten kann, abhängig vom Kunden, und für die Verteilung Konfigurationsdateien hinzugelegt werden können wird bei der Installation kontrolliert ob Dateien beigelegt wurden und diese ggf. genutzt.

Leider ist bei den Dateien eine INI-Datei dabei von einem Fremdanbieter welche in den Windowsfolder kopiert werden muss.

CODE
//Registry anpassen mit SigPlus.ini
MsiGetProperty(hMSI,"SourceDir",sSourceDir,nSize);
rc = Is (FILE_EXISTS, sSourceDir ^ "my.ini");
 if (rc = TRUE) then
    if (CopyFile (sSourceDir ^ "my.ini", WindowsFolder ^ "my.ini")< 0) then
      MessageBox("my.ini konnte nicht kopiert werden.", SEVERE);        
   endif;
 endif;  

Die Datei kann nicht kopiert werden, da mir das Recht fehlt.

Das selbe Problem habe ich mit einer Reg-Datei ,welche Daten unter HKLM schreiben soll.

CODE
//Registry anpassen mit My.reg
rc = Is (FILE_EXISTS, sSourceDir ^ "My.reg");
if (rc = TRUE) then
   if (LaunchApp(WindowsFolder ^ "Regedit.exe", "/s " + sSourceDir ^ "My.reg" ) < 0) then
     MessageBox ("My.reg konnte nicht importiert werden",SEVERE);
   else        
    Delay(2);
  endif;
endif;


Einstellungen:
Allgemeine Informationen --> Stream-Dateiinfo --> Adminrechte verlangen -->Ja
Release --> Erforderliche Ausführungsstufe --> Aufrufen
Advertise if Prerequisites are Elevated --> Nein
Die CA wurde bereits unter "Ausführungssequenz installieren" zwischen "Nach InstallInitialize" und "Nach InstallFinalize" eingebaut.

Weiter versuche ich den Druckerspooler über ein Script zu beenden und starten. Auch da geht es nicht unter Vista. Mit nResult = ServiceGetServiceState ("Spooler", nvServiceState); bekomme ich -1 zurück.

Kann es sein das der ein Punkt in unter der Liste von IS2008 mit dazu zwingt/bringt eine neue Version zu erwerben?

Verbesserte Unterstützung für Windows Vista, auch für InstallScript und One-Click Install Projekte.


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 04 June 2007 - 11:33

QUOTE
ich benutze IS12 und erstelle ein Basic MSI Setup

QUOTE
DIESER BEREICH IST NICHT FÜR MSI (WINDOWS INSTALLER) PROJEKTE, auch nicht für "InstallScript MSI"

Ich verschiebe die Frage in den Basic MSI Bereich.

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 04 June 2007 - 11:38

Deine Custom Action muss auf "Deferred Execution is System Context" eingestellt sein - dabei ist System Context das Entscheidende. Sie muss dann zwischen InstallInitialize und InstallFinalize ausgeführt werden. Leider hast du dann keinen direkten Zugriff mehr auf die meisten Properties. Du musst testen ob das auch dein SourceDir betrifft. Notfalls musst du CustomActionData verwenden wie in der HIlfe unter "Obtaining Context Information for Deferred Execution Custom Actions" beschrieben.

bigmasa

bigmasa
  • Full Members
  • 3 posts

Posted 05 June 2007 - 09:44

Grundsätzlich funktioniert das kopieren an der Stelle. Testen konnte ich dies bis jetzt nur mit einem festen Verweis auf ein Ordner, da ich bei CustomActionData immer nur einen Leerstring gekommen und das egal was ich vorher auslese. Dabei hab ich die 4 Punkte in der Hilfe schritt für schritt ausgeführt und 1000 mal Kontrolliert.

Gibt es da keine andere Möglichkeit wie ein Setup ermitteln kann wo es sich befindet. Ich will doch bloß den Ort der MSI-Datei an der Stelle wissen, das kann doch nicht so schwer sein?!

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 06 June 2007 - 23:13

QUOTE
Dabei hab ich die 4 Punkte in der Hilfe schritt für schritt ausgeführt und 1000 mal Kontrolliert.
Beschreib deine Einstellungen doch mal hier genau. Irgendwo muss da ein Problem sein wenn bei dir CustomActionData nicht funktioniert.

bigmasa

bigmasa
  • Full Members
  • 3 posts

Posted 07 June 2007 - 07:05

Das Problem hat sich teilweise erledigt.
Ich kann zwar [SourceDir] nicht als CustumActionData nutzen aber zumindest [INSTALLDIR] und während der Verzögerung kann ich den ProductCode auslesen.
Somit kopiere ich alle mitgelieferten Dateien in "temp\ProductCode" und anschließend in der Verzögerung dann an die stellen wo ich die hingehören. Dann funktioniert das auch ohne Probleme unter Vista.

Den Drucker habe ich übrigens auch mit einer Verzögerung zum laufen bekommen. Jetzt läuft der unter XP, 2003 und Vista, nur unter w2k läßt der sich nicht vom Script wieder starten, aber da kommt dann eine Meldung mit der Aufforderung manuell zu starten oder zu rebooten.

Edited by bigmasa, 07 June 2007 - 07:06.


guenne

guenne
  • Full Members
  • 29 posts

Posted 18 September 2007 - 12:45

Hi,

ich habe ein ähnliches Problem, ich möchte auch von SourceDir nach irgendwo hin rzesd kopierrn, das klaptt auch trotz eingeschalter UAC in Vista. Wenn ich aber kein echter"Administator" bin, kopiert er in meiner CustomAction (Installscript s.u.) nur neue Dateien nach [INSTALLDIR] und wenn welche schon vorhanden sind (im Ziel) werden diese nicht aktualisiert.

Ich dachte auch mit CustumActionData vielleicht was zu machen, ich finde aber nicht wo und wie man das einsetzt, habt Ihr mir da ein paar Tipps oder Bsp wie meine Custom Action so läuft ?


function MyFunction(hMSI)
begin
CopyFile (SourceDir ^ "all.ini", INSTALLDIR ^ "all.ini");
CopyFile (SourceDir ^ "all1.ini", INSTALLDIR ^ "all1.ini");
end;

usw.


Danke und Gruß
Günne


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 20 September 2007 - 07:29

Ich versteh die Frage nicht so ganz, aber mit dem ProcessMonitor von SysInternals müsstest du ein Rechteproblem erkennen können.
Warum verwendest du zum Kopieren eine Custom Action und nicht die MoveFile Tabelle?