Jump to content
Ketarin forum


  • Content Count

  • Joined

  • Last visited

Posts posted by shawn

  1. This might be by design, but I hope not.

    Using "exit 3" in the pre-download command doesn't run post-update command, though "exit 3" means:

    Skip downloading, but update the "last updated" date of the application and mark as "update downloaded". Allows you to use an external download application to download the file, but still mark it as properly updated in Ketarin.

    I just noticed that using "exit 3" hasn't been running my post-update command, so it hasn't been updating my external logging system. I really need it to be able to use the standard post-update command so that it'll allow updates to push the results to my server.

    I don't want to have to maintain the post-update command in multiple locations ("global" plus in each pre-update command for those that use "exit 3").

    I know it's possible to parse the post-update command from the database and inject it in the pre-update command using powershell, but I'd prefer to not have to use more than "exit 3" if possible. If necessary, I'm open to using "open 4" or any other exit code to preserve backward compatibility and offer post-update only to the new exit code.


  2. If you know what the filename is you want to use, just change the save-as behavior to use the filename you want. I usually use this pattern:


    Assuming that you want the filename to be "[UGX]nazi_zombie_rats v2.zip" you could use:

    ..\{category}\[UGX]nazi_zombie_rats v2.zip

    Of course, if you're already using that as the app name you could just use:



  3. 1) Show us the template. Anything we advise without it is only a guess. For example, it could be that the change you made was a "default", not an explicit value or part of the non-variable template structure.

    2) No. The updates apply to the template as it differed from the original import, which may have used any variation in the specific template. The structure around the actual app should be modified fine, but the template reference should not.

    3) No. For referential information (in case variables were in a different order originally, you changed them after the fact, or other minor edits to the specific app) the template, as it was originally created, needs to be the reference point.

  4. If you don't have a physical file to compare to and 'check for updates only' is enabled then it will check the size, last modified and e-tag against the record data from the last downloaded file. It will not *update* the information it compares against unless it performs a download.

    There is a way to work around this and update the stored reference information if you want to manage the downloads externally or don't want to actually download the files at all. This is done by returning exit code 3 in the Before Update command. This is ridiculously easy - you just have to add "exit 3" to the end of the script 'execute the following command before downloading' on the Commands tab.

    If you're using this to monitor something and want to automate it externally you can use this script to push the new file information to a file, send an email, or anything else you can do with the command line or powershell. Just make sure "exit 3" is the last line. 

  5. I don't often use FTP URLs, but as far as I can recall, they've always worked for me since 1.8.6.

    I switched all the ones I had that used FTP to an HTTPS URL though, so don't have a working one to compare with right now.

    Anyway, I'm adding NcFTP. It uses an FTP URL (surprised?). The download URL includes spaces:

    ftp://ftp.ncftp.com/ncftp/binaries/Setup NcFTP 3.2.6.msi

    ftp://ftp.ncftp.com/ncftp/binaries/Setup NcFTP 3.2.6.msi

    Unfortunately, I get the following error every time:

    NcFTP	The format of the URI "" cannot be determined. (ftp://ftp.ncftp.com/ncftp/binaries/Setup NcFTP 3.2.6.msi)

    I've tried replacing the spaces with "%20" and "+". Both return a different error (550). 

    I've tried using a different FTP download from the server:

    NcFTP	The format of the URI "" cannot be determined. (ftp://ftp.ncftp.com/ncftpd/2.8.7/ncftpd-2.8.7-aix5.3.0-export.tar.gz)

    Is it the FTP server that's causing the problem or am I missing something else that's going to be obvious once I investigate?


  6. Yes, two ways I can think of.

    Option 1) Edit the XML: it might be a bit of a challenge if you're not comfortable with XML.

    The easy way is to find+replace the command in the raw XML. 

    Select-all in the main Ketarin interface then copy (CTRL+C).

    Open Notepad++ (or your favorite text editor with accurate find & replace support).

    Find & replace the previous command(s) with the new one.

    Select all, copy, paste back into Ketarin. 


    Option 2) Use a database editor to assign the ExecuteCommand value to the new command. 

    Use DB4S to open the jobs.db file. "Browse Data" for the jobs table. Either paste the command into the ExecuteCommand column for each of your maps or use SQL to change it on several at once. If you're comfortable with using an SQL command you can use one of these, but I recommend you backup your jobs.db file first.

    This one applies the new command to EVERY profile you have:

    UPDATE jobs SET ExecuteCommand = '"{file}" /S /D="%LocalAppData%\Activision\CoDWaW\mods"';

    This one applies the new command to ONLY the profiles in the category "Mods":

    UPDATE jobs SET ExecuteCommand = '"{file}" /S /D="%LocalAppData%\Activision\CoDWaW\mods"' WHERE Category='Mods';


    Good luck.

  7. You could also do this from the command line without having to open DB4S. Download sqlite3.exe (it's in the sqlite-tools-win32 package) and put it in the same folder as your Ketarin database (or in your path). Create a batch file next to your Ketarin database and put this in it:

    sqlite3 test.db "UPDATE jobs SET PreviousRelativeLocation = replace(PreviousRelativeLocation,'..\repository\','\\CHANGE_ME_FOR_NEW_PATH\');"

    Be sure to replace '..\repository\' and '\\CHANGE_ME_FOR_NEW_PATH\' to the correct original and new paths. 

    And, this is important, be sure to quote the strings in single-quotes, NOT double-quotes. sqlite3 is a stickler for true SQL syntax, so only allows single-quotes for wrapping string literals.

  8. I don't play COD, so this is based only on what you said. Since the maps are located in the User folder you have three options:

    1) You can use the "/D" switch to set the installation directory:

    "{file}" /S /D="%LocalAppData%\Activision\CoDWaW\mods"

    2) You can copy the EXE file there and run it from that folder:

    copy /y "{file}" "%LocalAppData%\Activision\CoDWaW\mods\"
    "%LocalAppData%\Activision\CoDWaW\mods\{file:filename}" /S

    3) If you want to install it for all users on a device you can run it from the download folder and copy the files into each mods folder (assumes that the download folder has ONLY the installation file and nothing else in it):

    "{file}" /S
    for /d %%u in (c:\users\*) do (
        robocopy "{file:directory}" "%%u\AppData\Local\Activision\CoDWaW\mods" /xf "{file:filename}"


  9. Welcome, Peter!

    There is some great documentation for Ketarin on the Wiki

    What you're looking for is either {root} or {startuppath}, depending on how you want to write your scripts. The final strings would be something like "{root}\ketarin\..\InstallDir1\Installer1.exe" and "{startuppath}\..\InstallDir2\Installer2.msi", or, for msiexec:

    msiexec /q /nr "{startuppath}\..\InstallDir2\Installer2.msi"

    HOWEVER, you may find that a better solution (especially if you're creating a portable drive) is to remap it to the drive letter it's expecting. Pick a high drive letter and you can prep the drive with powershell using something like this:

    Get-Partition -DriveLetter ($pwd.path.substring(0,1)) | Set-Partition -NewDriveLetter K

    Run this (elevated) as part of your initial startup routine and you can be a lot more lenient with the drive letters using K: as the Ketarin drive. Of course, don't run this from a script on C:. :)

  10. While not necessarily a bug, it is a compatibility issue and it's been bothering me for a while. 

    The correct format to wrap a URL is with angle brackets or spaces (per RFC 2396). If there is a likelihood that a URL will wrap, then angle brackets are preferred. Please change both the popup and variable formats to use angle brackets instead. 

    Why? Regular expression matching for URLs assumes that parentheses are part of the URL. This means that when I copy and paste it into Notepad++ or almost any other program that can parse the URLs, it will treat the trailing ")" as part of the URL when generating clickable links. If it's a ">" instead, however, the URL isn't malformed.

  11. It looks like this is a problem with that specific site. The content returned in {download} is the actual file so parsing for http[^']*zip isn't going to get you anywhere. Unfortunately, since that request is being POSTed to the server Ketarin can't (currently) perform the download natively. You can shell use the pre-download script to download it using an external system like wget, curl, powershell, or any other utility that has the ability to POST and download. 

  12. Sorry @jokerfool for the long delay in response. sometimes i dont get notifications from the forum.

    Is it downloading to a slow drive or network location? I swapped out my Ketarin storage drive to an SSD and it made a huge improvement in my ability to bump up the simultaneous downloads. 

    Are you writing to an external log or update list file? You could be getting a race condition from simultaneous downloads both trying to write to the log at the same time.

  13. Here's a working template for the x86 version (the only one that reliably supports TextFX):


    <?xml version='1.0' encoding='utf-8'?>
      <ApplicationJob xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Guid="071dc699-15b5-4a76-8296-d1d9b91d2449">
        <UserNotes />
        <HashVariable />
        <HttpReferer />
        <SetupInstructions />
                <Regex />
        <ExecuteCommand />
        <ExecutePreCommand />
        <FileHippoId />
        <Name>Notepad++ (x86)</Name>


  14. @jokerfool can you at least pin down whether they're FH or standard jobs?

    Does it happen every time? Can you select 5 or 10 jobs at a time and see if you can recreate the error to track down whether it's the same jobs? If you can get it to repeat on one or more jobs, please post the job XML here. 

  15. With Cloudflare you're pretty well stuck unless you can find a consistent pattern for the download files since the downloads themselves are rarely behind Cloudflare. In this case there is a pattern so you're good. 

    You can get the current version number from this using this pattern:


    You can then construct the download URL by inserting the version numbers in these patterns:


    The download URL does not support HTTPS, but will download once you've injected the version numbers (and major version number in the first field).

  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.