11 Replies Latest reply on Nov 13, 2013 3:38 AM by _Mel_

    Variable %ShellFolders.Appdata% wird nicht aufgelöst

    MichaelAhlswede Apprentice
      Ich habe ein Problem mit NetinstallVariablen in einem eScript,
      es wird ausgeführt mit DSM7.2 unter Win 8 pro 64 bit.

      Das Script soll nach Installation des Firefox im Profiledirectory des angemeldeten Users ein FirefoxProfile Directory anlegen, dort Dateien hineinkopieren (Bsp. C:\Users\johndoe\AppData\Roaming\Mozilla)


      Ausschnitt aus dem eScript

      ...
      ExecuteEx('"\\%CurrentServer%\depot$\Firefox\22.0\Firefox Setup 22.0 DE.exe" -ms','rc','8')/?/TS
      !
      If not Exist('%ShellFolders.AppData%\Mozilla\Firefox\profiles.ini')
        InstallFileList('%ShellFolders.AppData%\Mozilla\Firefox')
         \\%CurrentServer%\depot$\Firefox\FirefoxProfil\DE\SHELLFOLDERS.APPDATA\Mozilla\Firefox\profiles.ini
        EndProc/U/TU
        InstallFileList('%ShellFolders.AppData%\Mozilla\Firefox\Profiles\abcd1234.default')
         \\%CurrentServer%\depot$\Firefox\FirefoxProfile\DE\SHELLFOLDERS.APPDATA\Mozilla\Firefox\Profiles\abcd1234.default\bookmarks.html
          ... (weitere Dateien) ...
         \\%CurrentServer%\depot$\Firefox\FirefoxProfile\DE\SHELLFOLDERS.APPDATA\Mozilla\Firefox\Profiles\abcd1234.default\xpti.dat
        EndProc/TU
      ...


      Der User meldet sich das erste Mal am PC an, es soll der Userpart der FirefoxInstalllation ausgeführt werden.

      Aber bei Ausführung des Scripts wird die Variable %ShellFolders.Apddata% nicht aufgelöst.
      NiInst32 stürzt sogar ab, da es viele Dateien zu %ShellFolders.Apddata% kopieren soll (Win 8 meldet sinngemäss Niinst32.exe antwortet nicht mehr)

      Im Log ist zu finden

      16:19:26.134 2        ->  ExecuteEx('"\\SRVDEHAN1DSM.keymile.net\depot$\Firefox\22.0\Firefox Setup 22.0 DE.exe" -ms','rc','8')/?/TS
      16:19:26.135 1         Skipping wksta-cmd.

      16:19:26.136 1        Evaluating condition "not Exist('_ShellFolders.AppData_\Mozilla\Firefox\profiles.ini')"
      16:19:26.136 E         Warning (Module:Main, Severity:0x03): Can't resolve variable ShellFolders.AppData
      16:19:26.137 1         SWMSRT: Checking if policies should run for the trigger 'On error'.
      16:19:26.138 0         SWMSRT: No triggered jobs found
      16:19:26.138 2        Condition TRUE  -> entering IF part
      16:19:26.139 E        Warning (Module:Main, Severity:0x03): Can't resolve variable ShellFolders.AppData
      16:19:26.140 1        SWMSRT: Checking if policies should run for the trigger 'On error'.
      16:19:26.140 0        SWMSRT: No triggered jobs found

      16:19:26.141 2        ->   InstallFileList('_ShellFolders.AppData_\Mozilla\Firefox') ... /U/TU


      Ich erwarte hier eigentlich "InstallFileList (C:\Users\johndoe\Appdata\Roaming\Mozilla\Firefox".

      Wo liegt der Fehler?  Warum wird die Variable nicht aufglöst?


      Die F7 Installation funktioniert, liefert im Log:
      (der Account frs ist der ServiceAccount runtimeservice)

      16:33:56.986 1        Evaluating condition "not Exist('_ShellFolders.AppData_\Mozilla\Firefox\profiles.ini')"
      16:33:56.987 2        Condition TRUE  -> entering IF part

      16:33:56.988 2        ->   InstallFileList('C:\Users\frs\AppData\Roaming\Mozilla\Firefox') ... /U/TU
      16:33:56.989 2         Creating dir C:\Users\frs\AppData\Roaming\Mozilla\Firefox
      16:33:56.989 0         siClnt32: Creating dir C:\Users\frs\AppData\Roaming\Mozilla...
      16:33:57.020 0         siClnt32: Creating dir C:\Users\frs\AppData\Roaming\Mozilla\Firefox...
        • 1. Re: Variable %ShellFolders.Appdata% wird nicht aufgelöst
          CalumField1 Expert
          Benutze der Variable %appdata% (= "C:\Users\USERNAME\Appdata\Roaming")
          • 2. Re: Variable %ShellFolders.Appdata% wird nicht aufgelöst
            MichaelAhlswede Apprentice

            Benutze der Variable %appdata% (= "C:\Users\USERNAME\Appdata\Roaming")



            ja, Danke für den Hinweis, an diesen Workaround "Environmentvariable" hatte ich auch bereits gedacht.
            Aber es ist schon ein wenig unbefriedigend, wenn mir DSM7 die Verwendung von Netinstallvariablen anbietet, dann aber doch nicht verwenden kann.

            Ich erhoffe mir noch Antwort(en), die mich auf einen Fehler hinweisen.
            • 3. Re: Variable %ShellFolders.Appdata% wird nicht aufgelöst
              CalumField1 Expert
              Wenn du diese Variable in DSM eingeschaltet hast, dann sollte es in der Tat aufgelöst werden können.

              Wenn nicht, ist es einen ungewollten Bug.
              • 4. Re: Variable %ShellFolders.Appdata% wird nicht aufgelöst
                Michi Expert
                Hallo Michael,

                bei mir wird unter Server 2012 und 2008 R2 die Variable richtig aufgelöst.
                Einen Windows 8 Client hab ich grad nicht da.
                Ich nutze hier die 7.2.1 mit HB4

                Gruß
                Michi
                • 5. Re: Variable %ShellFolders.Appdata% wird nicht aufgelöst
                  _Mel_ Master
                  die folder werden erst erzeugt, wenn jemand darauf zugreift - und wenn der isntaller in einem account läuft, für den der folder noch nicht erzeugt wurde, dann funktioniert es nicht.
                  (da wird nicht die richtige windows funktion für den zugriff verwendet, sondern einfach der wert aus der registry ausgelesen. und der kann da sein, muß aber nicht)

                  siehe auch: http://blogs.msdn.com/b/oldnewthing/archive/2003/11/03/55532.aspx
                  • 6. Re: Variable %ShellFolders.Appdata% wird nicht aufgelöst
                    MichaelAhlswede Apprentice
                    Vielen Dank an alle für Eure Kommentare und Hinweise.

                    Ich denke, Mel hat den Grund in [URL="http://forum.enteo.com/showpost.php?p=41107&postcount=6"]#6 genannt. Genaugenommen ist's ein Netinstallfehler, da vermutlich die falsche WindowsApiFunktion zur Erzeugung der ShellFolders.XXX Variablen verwendet wird.

                    Übrigens, die ganze Wahrheit - dieses Projekt läuft bereits seit mehreren Jahren in Netinstall 5.8 fehlerfrei, ich hab's nur für/in DSM7 neu erstellt. Deswegen auch die Verwunderung, dass es nicht (mehr) funktioniert

                    Im NiProjekt Firefox habe ich den entsprechenden Registrykey ausgelesen, tja, und den gibt's tatsächlich nicht:

                    RegReadValueEx('HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders','AppData','myAppData',reUseX64Hive)/X
                    ModifyOemEx('c:\windows\temp\svars.txt','','','',moInsertAtTop+moOverwriteExisting)
                    ShellFolders.AppData: %ShellFolders.AppData%
                    myAppData:            %myAppData%

                    EndProc/TU

                    Im Log ist zu finden:

                    11:36:50.083 2        ->  ExecuteEx('"\\SRVDEHAN1DSM.keymile.net\depot$\Firefox\22.0\Firefox Setup 22.0 DE.exe" -ms','rc','8')/?/TS
                    11:36:50.084 1         Skipping wksta-cmd.

                    11:36:50.085 2        ->  RegReadValueEx('HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders','AppData','myAppData',reUseX64Hive)/X
                    11:36:50.085 E         Warning (Module:Main, Severity:0x03): Couldn´t read regvalue AppData
                    Das System kann die angegebene Datei nicht finden.
                    11:36:50.086 1         SWMSRT: Checking if policies should run for the trigger 'On error'.
                    11:36:50.087 0         SWMSRT: No triggered jobs found
                    11:36:50.088 E        Warning (Module:Main, Severity:0x03): Can't resolve variable ShellFolders.AppData
                    ... ... ...
                    11:36:50.090 2        ->  ModifyOemEx('c:\windows\temp\svarsff.txt','','','',moInsertAtTop+moOverwriteExisting) ... /TU
                    11:36:50.091 2         File doesn´t exist.
                    11:36:50.092 2         Trying to create file
                    11:36:50.093 2         File created.

                    11:36:50.094 1        Evaluating condition "not Exist('_ShellFolders.AppData_\Mozilla\Firefox\profiles.ini')"
                    11:36:50.094 E         Warning (Module:Main, Severity:0x03): Can't resolve variable ShellFolders.AppData


                    Der Inhalt der erzeugten Datei:

                    ShellFolders.AppData: %ShellFolders.AppData%
                    myAppData:           



                    Ich habe ein weiteres NiProjekt erstellt, das später, also nach der Ausführung des Firefoxprojekts, ausgeführt wird:
                    und da ist der Registrykey und die Variable ShellFolders.AppData "mit Leben gefüllt"


                    11:36:51.717 2        ---->Starting installation of "ShowVaribales"

                    11:36:51.719 2        -> RegReadValueEx('HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders','AppData','myAppData',reUseX64Hive)/X
                    11:36:51.720 2         Read value 'C:\Users\johndoe\AppData\Roaming' from registry

                    11:36:51.722 2        -> ModifyOemEx('c:\windows\temp\svars.txt','','','',moInsertAtTop+moOverwriteExisting) ... /TU
                    11:36:51.723 2         File doesn´t exist.
                    11:36:51.724 2         Trying to create file
                    11:36:51.724 2         File created.


                    der Inhalt der erzeugten Datei

                    ShellFolders.AppData: C:\Users\johndoe\AppData\Roaming
                    myAppData:            C:\Users\johndoe\AppData\Roaming
                    • 7. Re: Variable %ShellFolders.Appdata% wird nicht aufgelöst
                      voidpointer Apprentice
                      setzt mal diesen Regkey,

                      HKLM\SOFTWARE\NetSupport\NetInstall\InstallSettings
                      EnforceXpShellFolder =dword:00000001

                      dann verwendet Netinstall nicht die Registry für die Auflösung sondern
                      sondern die API fkt SHGetFolderPath
                      • 8. Re: Variable %ShellFolders.Appdata% wird nicht aufgelöst
                        MichaelAhlswede Apprentice
                        Nachdem ich vor kurzem wieder einmal über diesen Fehler gestolpert bin,
                        diesmal war's ShellFolders.Fonts

                        Copy('.\FNT\CODE128_KM.TTF','%ShellFolders.Fonts%\CODE128_KM.TTF')/U/TS )


                        hab' ich einen Workaround erstellt:

                        im eScript mit CallScript zu vbs die Variablen per NiSetVar füllen lassen

                        ! Netinstall does not know about ShellFolders.xxx variables, if no user has logged in before
                        ! so we ask Windows via VBS
                        Copy('\\%CurrentServer%\depot$\misc\SpecialFolders.vbs','c:\temp\SpecialFolders.vbs')/TS
                        CallScript('c:\temp\SpecialFolders.vbs')/TS


                        der VBS Dreizeiler:


                        '
                        ' Netinstall does not know about ShellFolders.xxx variables, if no user has logged in before
                        ' so we ask Windows
                        '

                        option Explicit
                        dim WshShell, strDesktopFolder, strCommonDesktopFolder, strFontsFolder

                        set WshShell = CreateObject("WScript.Shell")

                        strDesktopFolder       = WshShell.SpecialFolders("Desktop")
                        strCommonDesktopFolder = WshShell.SpecialFolders("AllUsersDesktop")
                        strFontsFolder         = WshShell.SpecialFolders("Fonts")

                        'WScript.Echo strDesktopFolder
                        'WScript.Echo strCommonDesktopFolder
                        'WScript.Echo strFontsFolder

                        NiSetVar "ShellFolders.Desktop", ""&strDesktopFolder&""
                        NiSetVar "ShellFolders.Common Desktop", ""&strCommonDesktopFolder&""
                        NiSetVar "ShellFolders.Fonts", ""&strFontsFolder&""



                        @ void*
                        Danke für deinen Hinweis.
                        Bisher hab' ich diesen Hinweis aber noch nicht umgesetzt. Ich muss ja "irgendwie" den RegKey in den Client kriegen, bevor NiAgnt32.exe/ NiInst32.exe gestartet wurde.
                        Bisher verwende ich noch das "Default OS Action Package", da muss dann wohl noch ein regedit /s rein.
                        • 9. Re: Variable %ShellFolders.Appdata% wird nicht aufgelöst
                          Markus.Zierer Expert
                          Hallo,

                          Hm, ich glaube mich erinnern zu können, dass ich erst vor Kurzem bei der Suche nach nem anderen Thema über die ShellFolders gestolpert bin. Und da meine ich gelesen zu haben, dass Microsoft selbst sagt, man solle die ShellFolders Variablen nicht mehr benutzen, da diese lediglich zwecks Kompatibilität zu ganz alten Windows Versionen mitgezogen werden. Aber eigentlich sind die Veraltet und sollten nicht mehr genutzt werden.

                          Würde ich Schade finden, da ich die selbst ganz gern mal nutze...
                          • 11. Re: Variable %ShellFolders.Appdata% wird nicht aufgelöst
                            _Mel_ Master


                            Bisher hab' ich diesen Hinweis aber noch nicht umgesetzt. Ich muss ja "irgendwie" den RegKey in den Client kriegen, bevor NiAgnt32.exe/ NiInst32.exe gestartet wurde.
                            Bisher verwende ich noch das "Default OS Action Package", da muss dann wohl noch ein regedit /s rein.

                            die meisten solcher registry werte werden est abgefragt wenn sie gebraucht werden. d.h. ein entsprechender escriptbefehl unmittelbar vorher sollte höchstwahrscheinlich reichen.