Jump to content

MHz

Member
  • Posts

    1,691
  • Joined

  • Last visited

  • Donations

    0.00 USD 
  • Country

    Australia

Posts posted by MHz

  1. This is a different way to handle closing the CDRom tray. This works without specifying the drive letter literally in registry. It also uses AutoIt to handle the tray functions of opening (eject) or closing.


    If $CMDLINE[0] Then
    Switch $CMDLINE[1]
    Case 'help', '/?', '-?'
    ; show help
    MsgBox(0x40000, Default, 'Switches are:' & @CRLF & _
    'open <drive letter:>' & @CRLF & _
    'close <drive letter:>' & @CRLF & _
    'register' & @CRLF & _
    'unregister')
    Case 'open'
    CDTray($CMDLINE[2], 'open')
    Case 'close'
    CDTray($CMDLINE[2], 'closed')
    Case 'register'
    ; copy this compiled executable to system directory
    If Not FileCopy(@ScriptFullPath, @SystemDir & '\CDTray.exe', 1) Then
    MsgBox(0x40000, 'Close CD Tray Installation', _
    'Unable to copy "' & _
    @ScriptFullPath & '" to "' & @SystemDir & '\CDTray.exe"')
    Exit 1
    EndIf
    ; register CDTray.exe in registry
    $data = '"' & @SystemDir & '\CDTray.exe" close "%1"'
    If RegWrite('HKCR\Drive\shell\close', '', 'REG_SZ', 'Close Tray') _
    And RegWrite('HKCR\Drive\shell\close\command', '', 'REG_SZ', $data) Then
    MsgBox(0x40000, 'Close CD Tray Installation', _
    'Close CD Tray Installation has completed successfully!')
    Else
    ; show error
    MsgBox(0x40000, 'Close CD Tray Installation', _
    'Close CD Tray Installation has not been added to registry')
    Exit 2
    EndIf
    Case 'unregister'
    ; unregister CDTray.exe from registry
    If RegDelete('HKCR\Drive\shell\close') = 1 Then
    MsgBox(0x40000, 'Close CD Tray UnInstallation', _
    'Close CD Tray UnInstallation has completed successfully!')
    Else
    ; show error
    MsgBox(0x40000, 'Close CD Tray Installation', _
    'Close CD Tray Installation has not been removed from registry')
    Exit 3
    EndIf
    EndSwitch
    EndIf

    Compile it to make it work correct before using.

    :)

    Edit:

    A note of usage:

    Use the command CDTray.exe register to install the compiled executable. Use CDTray.exe unregister to uninstall it. Use CDTray.exe close <drive letter:> to close drive tray and CDTray.exe open <drive letter:> to open drive tray. Of course the context menu method is available as well when registered.

  2. OemFilesPath="%CDROM%\$oem$" ;OemFilesPath, as some of you know, in win2k and above there's a bug that causes the $OEM$ folder to not be copied. Because of this the $OEM$ folder might need to be under the i386 folder, or parallel to the i386 folder. Using this command makes the bug mute, since you're telling setup where the $OEM$ folder is.

    Hi darksimoon,

    The behavior is documented by Microsoft so it is by design.

    The %CDROM% variable may not work in your answer file. I would just try using OemFilesPath="\$OEM$".

  3. This example is based off the beta installer so text maybe different but same conditions should apply.

    #RequireAdmin

    $title = 'eBoostr 3.0 (BETA) Setup'

    Run("eBoostr.exe")

    ; handle the language window if appears and choose english
    AdlibEnable('_Language')

    WinWait($title, 'Welcome to the eBoostr')
    ControlClick($title, 'Welcome to the eBoostr', '&Next >')

    ; disable use of Adlib function
    AdlibDisable()

    WinWait($title, 'License Agreement')
    ControlClick($title, 'License Agreement', 'I &Agree')

    ; you can finish the code


    Exit

    Func _Language()
    If WinExists('Installer Language', 'Please select a language') Then
    ControlCommand('Installer Language', 'Please select a language', 'ComboBox1', 'SelectString', 'English')
    If StringInStr(WinGetText('Installer Language', 'Please select a language'), 'English') Then
    ControlClick('Installer Language', 'Please select a language', 'OK')
    EndIf
    EndIf
    EndFunc

    I used #RequireAdmin as UAC in Vista requires it to allow automation to happen. The script is incomplete but it handles the 1st 3 windows and you can complete it if you wish. :)

  4. Hi yocarim

    Your code seems OK up to the ControlClick function. The parameters of ControlClick is shown below and I will describe the parameters of concern.

    ControlClick ( "title", "text", controlID [, button [, clicks [, x [, y ]]]] )

    You seem to have the "title" and "text" parameters correct. The controlID can be the text of the control such as being "OK", or can be the ClassnameNN such as being "Button1" (ensure text case is correct) or if needed advanced uses such as class, handle and so on. The "button" parameter can only be "", "left", "middle", "right", "primary", "main", "secondary" or "menu" thus your value used seems incorrect.

    Perhaps try this

    ControlClick($title, "Please select a language.", "OK")

    or try this

    ControlClick($title, "Please select a language.", "Button1")

    I would not use the optional parameters unless you absolutely need to use them.

  5. Do Sleep(200)

    Until ControlCommand($title, , 'Button2', 'IsEnabled', '')

    ControlClick($title, "", "[CLASS:Button; INSTANCE:2]")

    Put the Do keyword on a line of it's own to avoid the error condition.

    Do
    Sleep(200)
    Until ControlCommand($title, , 'Button2', 'IsEnabled', '')
    ControlClick($title, "", "[CLASS:Button; INSTANCE:2]")

    You can use [ CODE ] ... [/ CODE ] tags (without spaces in the tags) to post code segments in this forum.

  6. I made the code on 1 line before & I got error messages.

    Is there a way to make it all on 1 line?

    Controlclick() normally works with an inactive window so this may do the task as being 1 line.

    If WinWait("setup") And ControlClick("setup", "", "[CLASS:Button; INSTANCE:##]") Then WinWaitClose("setup")

  7. So I try it... the install it fails. So I change the switch to /passive to see what is going on. Ghost takes about a min to install. While it installs, other addons will start there install which makes nortons fail. While trying the addon by itself, Windows will not wait for the program to finish.

    Back to 1st post as possible easy fix. If this is using CMD then you may try using "Start /Wait" to help with wait though a spawned process from msiexec maybe causing it to return early.

    I am sure I will ask you TONS of questions. I thank you so very much for your help. So I am guessing the Autoitmicrogenerator is the program I need to start out with learning??

    AutoItMacrogenerator is the easy option to create an automated installation script. You just run the program located in the Scite4AutoIt3 install at "C:\Program Files\AutoIt3\SciTE\AutoItMacroGenerator". I prefer to run it standalone rather then thrtough the editor so I can see lines added instantly. Click the red button to start recording, click the title of each window shown during installation and then click the controls (buttons, etc) needed. You should then get a quick and basic script for installation after completing the whole process of recording.

    I tried the microgenerator program, using nortons ghost setup.exe. I let it open and run and really ended up with nothing in the box but a single line. I have the program set up to install "passive" So I can see the progress bar. Will look around and see if I did something wrong with the generator.

    Unless the installer is Java or HTML based then I would expect the window and controls to be seen and recorded. Ensure that the recorder is in fact running.

    I also tried autoit screen recorder, Now that seemed to give me a bit more to work with. Here is the script I ended up with that. I put the Exit in myself.

    Opt("WinWaitDelay",100)

    Opt("WinTitleMatchMode",4)

    Opt("WinDetectHiddenText",1)

    Opt("MouseCoordMode",0)

    Run('C:\Documents and Settings\Administrator\Desktop\ghost 2003\setup.exe')

    WinWait("Information","To help ensure compa")

    If Not WinActive("Information","To help ensure compa") Then WinActivate("Information","To help ensure compa")

    WinWaitActive("Information","To help ensure compa")

    Send("{ENTER}")

    Exit

    The screen recorder can be used though it is not what I would refer as using functions suitable for automated installations. The screen recorder is more suitable for general desktop automation. The above script seems incomplete.

    Now it seems to me after the send command is sent I need to put in a line for a "winwaitdelay" to allow the program to install. I will stop here until

    You get a bit of time to help. I may be going down the wrong path and Need to work more with the autoitmicrogenerator to compile a more workable script. Will wait on you.

    "winwaitdelay" is an option to wait time before interaction from the next line of code. It is not a concern to use normally.

    I am also starting out with the tutorials. Will hopefully take a new step every day. Today I did the "hello world" script. I messed around for a min and kinda made a perverted one for the girlfriend. Had her click on it and the pop up box displayed a funny adult type message. We both got a tickle, and she was rather impressed I did that.

    lol, I accept humor. ;)

    Seen a post that someone suggested learning the manual stuff to better understand the automated stuff and I kinda agree. Its starting to make sense.

    Yes, I prefer manual by using AutoIt Info Tool to gather information from the windows though I may sometimes use AutoItMacrogenerator as a lazy method. Doing it manually will help you learn. Using AutoItMacrogenerator is an easy option to begin with is why I mentioned it.

    So if you can get a good start with the script then I can try to help you when you have problems. If Ghost installs fine using switches then you can try using ProcessWait() and ProcessWaitClose() on the spawned process to ensure wait time until end of installation so automation can be minimized.

    :)

  8. If you put the effort in getting the ID3 tags correct, then programs like MP3Tag can rename and organize the files programmatically based on the ID3 information. This allows you to change the filenames in seconds rather then doing tedious manual handling to do the same objective. Further renaming from an example of "%artist% - %title%" to something like "%number% - %title%" is easy and quick based on correct ID3 tags.

  9. Hi tym,

    The code displayed looks like template code generated from CMenu or SendToA3x. There is a help file included with these programs with a installation script example provided. You are going to need to use the "AutoIt Info Tool" supplied with AutoIt3 installation to get window titles, window text, control identification classes and what ever else is needed. You can also use AutoItMacrogenerator which is perhaps already supplied else you can get with an installation of Scite4AutoIt3 which contains it and can be used to generate an automated installation script with the values mentioned above filled in.

    This is a script I have in use from a template created by SendToA3X. The principle is the same as adding in needed info though I placed the functions within a separate include script.


    #region - VobSub install script - (Automated with WinWait functions)
    #include <Common_Functions.au3>
    Opt('TrayIconDebug', 1)
    Break(False)

    ; Installer.
    $executable = 'VobSub 2.23.exe'
    ; Default group folder in startmenu.
    $group = 'VobSub'
    ; Installation folder in Program Files.
    $directory = ''

    ; Run the installer.
    $pid = _Automated()
    $title = 'VobSub 2.23 Setup'
    If WinWait('Installer Language', 'Please select a language', 60) Then
    ControlClick('Installer Language', 'Please select a language', 'OK')
    WinWait($title, 'Welcome to the VobSub Setup')
    ControlClick($title, 'Welcome to the VobSub Setup', '&Next >')
    WinWait($title, 'Choose Components')
    ControlClick($title, 'Choose Components', '&Next >')
    WinWait($title, 'Select the folder to install VobSub')
    ControlClick($title, 'Select the folder to install VobSub', '&Install')
    WinWait($title, 'Installation Complete')
    ControlClick($title, 'Installation Complete', '&Close')
    Else
    _Abort()
    EndIf
    ProcessWaitClose($pid)

    ; Remove shortcuts.
    If _Programs('VobSub Configure.lnk') Then
    If FileMove($group & '\DirectVobSub Configure.lnk', 'Audio-Video\', 9) _
    And FileMove($group & '\VobSub Configure.lnk', 'Audio-Video\', 9) Then
    DirRemove($group, 1)
    EndIf
    EndIf

    Exit
    #endregion

    Ask if you need more help.

    :)

  10. Welcome to the forum RandomClown, :)

    How would I set 2 conditions in a While statement?

    - There is the i++ thing something like that I saw in the very useful help file

    - Where is the &&?

    AutoIt supports only the operators under "Language Reference" catagory in the help file supplied within the installation of AutoIt3.

    I want to set a While() with these conditions:

    - Run at most 10 times

    - Check if "Some Window" is up

    You may use as Nick White displays or you could use a For...Next loop that is suitable for limited looping by using a counter variable. Using AdlibEnable() function may also be suitable for detection in your script. The choice is for you to make. I made example code below.


    ; title of test window
    $title = 'Target Window'

    ; create a window to test with
    GUICreate($title)
    GUISetState()

    ; run the _Adlib() function every 2 seconds to check for the test window
    AdlibEnable('_Adlib', 2000)

    Sleep(2000)

    ; activate the test window if needed
    If Not WinActive($title) Then
    WinActivate($title)
    EndIf

    ; loop 10 times
    For $i = 1 To 10
    ; check if test window is active
    If WinActive($title) Then
    ; disable the _Adlib() function check
    AdlibDisable()
    ; show the result
    SplashTextOn('For...Next Loop', 'Window is active', 200, 50)
    Sleep(2000)
    SplashOff()
    ; enable the _Adlib() function check
    AdlibEnable('_Adlib', 2000)
    ; exit the For...Next Loop
    ExitLoop
    EndIf
    Sleep(500)
    Next

    Sleep(5000)

    Exit

    Func _Adlib()
    ; Adlib function to show result while the main code is executing
    SplashTextOn('_Adlib() function', 'Window is active', 200, 50)
    Sleep(1000)
    SplashOff()
    Sleep(250)
    EndFunc

    ...hmm I just saw this right now: "ExitLoop".

    I could do an If("Some Window" is up){ExitLoop} [of course in AutoIT language], but I want to cut off 3 lines from the tiny check script if possible.

    Single line If...Then... are allowed though your mention of removing 3 lines is beyond my understanding to answer with the information supplied.

  11. Does anyone see why the components aren't being removed, or any other problems with it?

    removed? they wont be removed but they shouldnt get installed when u install your windows from a fresh install

    AFAIK, removing the component files from the Windows setup files was not mentioned.

    In Windows XP, if you go to the "Add or Remove Programs" applet in control panel and use the "Add/Remove Windows Components" then you may understand the terminology of "remove" that Microsoft and Bolgan refers to.

    Perhaps you were mistaken by the different meanings that remove may have. Sorry if I seem critical in my correction but I considered worth a mention.

    @Bolgan

    I have had same issue when using "UnattendMode=ProvideDefault" with a components section in Winnt.sif. The components window does not show during setup with the previous settings. You are perhaps better to omit the components section with using ProvideDefault or use another UnattendMode setting.

    :)

  12. ...

    How could I create a context menu option to say "Move To R:\Full CD's " but open that particular folder so I could then browse to the artist folder and move the file to there?

    Hi Balders and welcome to MSFN.

    Thanks for the mention of appreciation. :)

    The editor and shell extension is not my property just for clarification. I make use of them as per conditions of the Revenger inc. license supplied with CMenuExtender. The CMenu.exe and some of the other support files is what I created.

    The copy to folder and move to folder preset options seem to want a static path to send to. I would recommend a script to do the custom operation that you want. I made a AutoIt3 script which when compiled may do what you have described as a custom starting path for the folder dialog.


    ; usage: script.exe copy|move source [ destination ]

    ; CMenu settings:
    ; Within editor, select New Item -> Custom command.
    ; Add suitable caption, browse for this compiled script and then
    ; add into the Commandline 'copy "custom path\to\copy\to"'.
    ; you can just use copy or move without any
    ; other parameter for default destination search.
    ; set the append file checkbox and then click OK button to accept.

    Global $action, $destination

    Switch $CMDLINE[0]
    Case 2
    _CheckAction()
    $destination = FileSelectFolder($action & ' source to', '')
    If Not @error And $destination <> '' Then
    $source = $CMDLINE[2]
    _PerformAction()
    EndIf
    Case 3
    _CheckAction()
    $destination = FileSelectFolder($action & ' source to', '', Default, $CMDLINE[2])
    If Not @error And $destination <> '' Then
    $source = $CMDLINE[3]
    _PerformAction()
    EndIf
    Case Else
    _HelpMsgBox()
    EndSwitch

    Exit

    Func _CheckAction()
    ; set $action to copy or move
    Switch $CMDLINE[1]
    Case 'copy'
    $action = 'copy'
    Case 'move'
    $action = 'move'
    Case Else
    _HelpMsgBox()
    EndSwitch
    EndFunc

    Func _HelpMsgBox()
    ; show a Msgbox with helpful details
    Local $text = _
    $CMDLINE[0] & ' parameters passed. 2 or 3 parameters required.' & @CRLF & @CRLF & _
    'Command used:' & @CRLF & _
    $CMDLINERAW & @CRLF & @CRLF & _
    'Usage:' & @CRLF & _
    '"' & @ScriptName & '" copy|move source [destination]' & @CRLF & @CRLF & _
    'Description:' & @CRLF & _
    'Use "copy" or "move" as 1st parameter.' & @CRLF & _
    'Use a valid source file or folder as 2nd parameter.' & @CRLF & _
    'Use an optional, valid destination folder path as 3rd parameter.'
    MsgBox(0, Default, $text)
    Exit
    EndFunc

    Func _PerformAction()
    ; call the copy or move function dependant on $action
    If $action = 'copy' Then
    _Copy($source, $destination)
    Else
    _Move($source, $destination)
    EndIf
    EndFunc

    Func _Copy($source, $destination)
    ; copy file or folder
    Local $oShellApp = ObjCreate("shell.application")
    If Not @error Then
    $oShellApp.NameSpace($destination).CopyHere($source)
    EndIf
    EndFunc

    Func _Move($source, $destination)
    ; move file or folder
    Local $oShellApp = ObjCreate("shell.application")
    If Not @error Then
    $oShellApp.NameSpace($destination).MoveHere($source)
    EndIf
    EndFunc

    Sample of settings window

    post-26076-1221978152_thumb.png

    I would recommend to test it with some temporary test files to ensure it works ok before doing your required tasks. You may need AutoIt3 to compile the script into an executable. You can get AutoIt3 from here.

    :)

    Edit:

    The above script may not handle multiple marked files/folders as the context menu extension handles them differently. I maybe able to adapt the script to do multiple files if needed.

  13. It seems to have gotten caught in a loop where it tries to keep opening WordWeb.

    Sorry. My results are different for some reason.

    This will use the Ctrl+Alt+w hotkey


    ; path to webword directory
    $ww_path = @ProgramFilesDir & '\WordWeb'
    ; WordWeb NoTray executable
    $exe_notray = 'wwnotray.exe'
    ; WordWeb Tray executable
    $exe_tray = 'wweb32.exe'
    ; main window title
    $title = '[CLASS:TTHeDi]'

    Select
    Case WinActive($title)
    ; nothing to do
    Exit
    Case ProcessExists($exe_notray) And Not WinActive($title)
    ; restore and activate the window
    WinSetState($title, '', @SW_RESTORE)
    WinActivate($title)
    Case ProcessExists($exe_tray) And Not WinActive($title)
    ; run tray exe to activate the window
    _RunWordWeb($exe_tray)
    Case Else
    ; no process running so choose $exe_notray or $exe_tray to run
    _RunWordWeb($exe_tray)
    EndSelect

    Exit

    Func _RunWordWeb($file)
    ; check to ensure the file to run is available, else return if not
    If Not FileExists($ww_path & '\' & $file) Or $file = '' Then
    Return SetError(1)
    EndIf
    Switch $file
    Case $exe_notray
    ; run no tray exe to show window
    Run('"' & $ww_path & '\' & $exe_notray & '"')
    If Not @error Then
    ; wait for the window and then activate it
    WinWait($title, '', 5)
    WinActivate($title)
    EndIf
    Case $exe_tray
    ; run tray exe
    Run('"' & $ww_path & '\' & $exe_tray & '"')
    If Not @error Then
    ; wait for hidden tray icon window
    WinWait('WordWeb Tray Icon', '', 5)
    Sleep(500)
    ; if the window is not active, then use the hotkey
    If Not WinActive($title) Then
    WinActivate($title)
    Send('^!w')
    EndIf
    EndIf
    EndSwitch
    Sleep(500)
    ; another attempt to activate the window if needed
    If Not WinActive($title) Then
    WinActivate($title)
    EndIf
    EndFunc

    If you wish, you can run the no tray executable instead by changing the parameter of _RunWordWeb() in the Case Else part which shows a window which behave like a normal window.

    before:

    	Case Else
    ; no process running so choose $exe_notray or $exe_tray to run
    _RunWordWeb($exe_tray)
    EndSelect

    after:

    	Case Else
    ; no process running so choose $exe_notray or $exe_tray to run
    _RunWordWeb($exe_notray)
    EndSelect

  14. You have a tray executable and a no tray executable and also window states to consider. I chose the cover all known scenarios.


    ; path to webword directory
    $ww_path = @ProgramFilesDir & '\WordWeb'
    ; WordWeb NoTray executable
    $exe_notray = 'wwnotray.exe'
    ; WordWeb Tray executable
    $exe_tray = 'wweb32.exe'
    ; main window title
    $title = '[CLASS:TTHeDi]'

    Select
    Case WinActive($title)
    ; nothing to do
    Exit
    Case ProcessExists($exe_notray) And Not WinActive($title)
    ; restore and activate the window
    WinSetState($title, '', @SW_RESTORE)
    WinActivate($title)
    Case ProcessExists($exe_tray) And Not WinActive($title)
    ; run tray exe to activate the window
    _RunWordWeb($exe_tray)
    Case Else
    ; no process running so choose $exe_notray or $exe_tray to run
    _RunWordWeb($exe_tray)
    EndSelect

    Exit

    Func _RunWordWeb($file)
    ; check to ensure the file to run is available, else return if not
    If Not FileExists($ww_path & '\' & $file) Or $file = '' Then
    Return SetError(1)
    EndIf
    Switch $file
    Case $exe_notray
    ; run no tray exe to show window
    Run('"' & $ww_path & '\' & $exe_notray & '"')
    ; wait for the window and then activate it
    WinWait($title, '', 5)
    WinActivate($title)
    Case $exe_tray
    ; run instances of tray exe until the window is active
    Do
    Run('"' & $ww_path & '\' & $exe_tray & '"')
    If Not ProcessExists($exe_tray) Then
    ; something is incorrect so return from this function
    Return SetError(2)
    Else
    Sleep(250)
    ; activate the window
    WinActivate($title)
    EndIf
    Until WinActive($title)
    EndSwitch
    EndFunc

    Starting a 2nd instance of the tray process seems to bring up the window so I chose that idea rather then the hotkey idea.

    Note that the keyword "Else" likes it's own line in AutoIt3 except for "Case Else" as to your code error. Also "End If" needs to be "EndIf".

    :)

  15. Please look at these topics:

    How do i hide the install window in autoit

    Can i use autoit ...

    In the initial code above, Send() requires an active and visible window to send to so I would at least expect WinWaitActive() to be used. WinWait() only waits for the window to appear. Look at WinWait(), WinActivate() and WinWaitActive() when using Send() or Mouse*() functions.

    You can hide an automated installation with AutoIt depending on various conditions that the certain installer allows. You may need to look at using WinWait() with the Control*() functions to achieve this. WinMove() and WinSetTrans() may be worth a look at using. Just about anything is possible with using AutoIt as you just need to understand how to do it.

    :)

  16. Does anyone have any ideas? This is driving me crazy.

    Try the idea that Yzöwl offers. If it fails then could you explain your setup some more so we may try to help you better.

    Some unknowns to consider

    • Are you using "OEMPreInstall=Yes" in Winnt.sif and adding these installers to "$OEM$\$1\COOL_STUFF" ?
    • What does OemPreInstall.cmd contain or do ?
    • Your installers use no switches so are they SFX archives that use a suitable extract and execute setup method ?

    Known issues to consider

    • Certain HKCU tweaks may not be accepted at T-12 stage of setup (cmdlines.txt). Add those certain tweaks at logon.

    Attaching any files mentioned above (mask any sensitive information) may also help to diagnose the issue.

  17. The bat file created is for a manual start to initiate setup. Since you are booting from CD, then the bat file is rather useless and can be disposed of.

    It is differcult to know exactly what is missing or incorrect but I do notice that you use "Yes" when I use "1" for the AutomaticUpdates value. Try changing the value from "Yes" to "1" and see if it makes a difference. I seem to remember some time ago that setup ignored the "YES", IIRC.

    [Data]

    AutomaticUpdates=1

    AutoPartition=0

    MsDosInitiated=0

    UnattendedInstall=yes

    :)

  18. I use an AutoIt script on XP Pro, much like your CMD script to do the last tasks in the setup. The shortcuts for IE and some others are created late when you arrive to the desktop. My script removes these shortcuts and do other tasks after a 10 second sleep so Windows Setup has fully complete. Upon completion, tasks are done, the HKCU\...\RunOnce entry is automatically removed and I see no more of it. The shortcuts do not return as you seem to describe. Why HKCU\...\RunOnce runs again for you is beyond me unless your CMD file adds the entry in again perhaps.

    :)

  19. Steam install will not work as you overwrite the registry entries with the following SendTo entries. The SendTo entries may fail as whitespace exists in the path in which no double quotes used to keep the path together as one string. I would guess that cleanup will work as expected.

    It is mentioned in the unattended guide about using quotes and using a backslash to escape them. Escaped double quotes will be added to registry where as the outer double quotes will not. Below shows your code with escaped double quotes added. Simply clicking on the CMD file adds the entries to the registry for you to examine for being correct. Remove the registry entries when the test is done.

    cmdow @ /HID

    @echo off

    SET KEY=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx

    REG ADD %KEY% /V TITLE /D "Installing Applications" /f

    REG ADD %KEY%\002 /VE /D "Steam" /f

    REG ADD %KEY%\002 /V 1 /D "\"%systemdrive%\install\Applications\steam.msi\" /qn" /f

    REG ADD %KEY%\003 /VE /D "Additions to Sendto" /f

    REG ADD %KEY%\003 /V 1 /D "\"%systemdrive%\install\Applications\ftp sendto.cmd\"" /f

    REG ADD %KEY%\099 /VE /D "Cleaning Up and Rebooting" /f

    REG ADD %KEY%\099 /V 1 /D "\"%systemdrive%\install\cleanup.cmd\"" /f

    EXIT

    The entries of concern are the entries with known or possible whitespace but I double quoted all to show a thorough example.

    :)

  20. The issue would be that you execute RunOnceEx.cmd with GuiRunOnce which is after the event of the RunOnceEx key being processed. You can keep your current concept and make it work immediately by adding one line to RunOnceEx.cmd. Calling the ierunonce.dll can do this for you.

    RunOnceEx.cmd

    : RunOnceEx.cmd
    setlocal enableextensions
    set cdrom=%~d0
    set key=HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnceEx
    reg add "%key%" /f /v title /d "Installing Applications"
    reg add "%key%\005" /f /ve /d "Registry Tweaks"
    reg add "%key%\005" /f /v 1 /d "%systemdrive%\install\xp\hklm.cmd"
    reg add "%key%\010" /f /ve /d "Adobe Acrobat Reader 9.0"
    reg add "%key%\010" /f /v 1 /d "%systemdrive%\install\acrobat\AdobeReader90.exe /sAll /rs"
    start /wait rundll32.exe iernonce.dll,RunOnceExProcess
    endlocal

    :)

  21. A count down timer is rather basic. What you want to happen once the count ends is could mean something. A versatile program that I use at times is Poweroff. Poweroff is freeware. It does more then just handling the PC power functions as it can show just a message, run a program etc. Some details can be found here. :)

  22. As you mention as posted here that you want to install from your %UserProfile% directories. The issue you are perhaps experiencing is that your %UserProfile% directories may not exist when Cmdlines.txt is executed. Only "Default User" and "All Users" profiles are available from Cmdlines.txt and any additional profiles created by the user are not available for use until they are logged into to at least once.

    "C:\Documents and Settings\Default User\Desktop\7-Zip-v4.42.exe" is not recognized as an internal oe external command, operable program or batch file.

    So perhaps 7-Zip-v4.42.exe is not in the "Desktop" directory of the "Default User" profile?

    If you wish to continue with the idea of adding installers to your personal %UserProfile%, then consider adding the files when your account has been created and logged into at least once. The usual time to add files to your own profile would be using RunOnceEx or GuiRunOnce which occur when you are logged into your account.

    :)

×
×
  • Create New...