Jump to content
Ketarin forum

shawn

Moderators
  • Posts

    1,179
  • Joined

  • Last visited

Posts posted by shawn

  1. if you don't have a lot of requests or apps then changing the UA globally is unlikely to help. if you do, then you might want to change it and keep it relatively current.

    the format for the version string in Chrome UA is "Chrome/major.0.0.0" - it never includes the minor or build numbers. This is similar to all other modern browsers - they don't include anything but the major version dot zero, and sometimes an additional couple dot-zeroes. Change it to:

    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36

    That alone might help.

    If you haven't set the Version number column to display in the main interface you might want to do that first. This ensures that you can see when new versions are detected and might help you troubleshoot this one. Since this site is one of the ones that is really aggressive about spiders you might want to test with a different one. I've attached another one (aria2) that uses Kuppet.

    aria2.xml

  2. Here's a working Real Temp that uses a PowerShell script to read the Location header from the POST response.

    Real Temp.xml

     

    SetDefaultBrowser works fine for me. Make sure you're not interfering with it! Kuppet has a built-in timeout that's higher than Ketarin alone, but this specific app uses an imposed 45 second delay *after the last activity*! This is important for anything that needs to bypass CloudFlare or Cloudfront CAPTCHA delays. This is the output I get in Kuppet with logging enabled:

    ---: Ketarin is playing with her puppet > Port:8080 Time: 3/13/2024 7:28:22 PM
    
    ===: KUPPET PARAMETERS
    ===: port            : 8080
    ===: kuppetTimeout   : 360
    ===: pageLoadTimeout : 90
    ===: userAgent       : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
    ===: verboseLogging  : true
    ===: logging         : true
    ===: chromeVisible   : false
    ===: -----------------
    
    ---: R01 | REQUEST  : https://kolbi.cz/blog/2017/11/10/setdefaultbrowser-set-the-default-browser-per-user-on-windows-10-and-server-2016-build-1607/
    ===: R01 | Post Data String: redirection-delay=45
    ===: Chrome instance starting
    ===: The BROWSER user agent is    : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/100.0.4889.0 Safari/537.36
    ===: Opening new page
    ===: Set page-load timeout        : 90 seconds
    ===: Setting PAGE user agent      : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36
    ===: Set extra headers
    ===: Visiting : https://kolbi.cz/blog/2017/11/10/setdefaultbrowser-set-the-default-browser-per-user-on-windows-10-and-server-2016-build-1607/
    ===: Rendering the javascript
    ===: Redirection-Delay for: 45 seconds
    ===: Rendering the Shadow DOM
    ===: Returning the rendered HTML - everything between <HTML>...</HTML>
    ===: 'Beautify' the HTML
    ===: Closing browser
    ---: R01 | RESPONSE : Cached:false : Duration:50.22 seconds
    ---: R02 | REQUEST  : https://kolbi.cz/blog/2017/11/10/setdefaultbrowser-set-the-default-browser-per-user-on-windows-10-and-server-2016-build-1607/
    ===: R02 | Post Data String: redirection-delay=45
    ---: R02 | RESPONSE : Cached:true  : Duration:0.004 seconds
    ---: R03 | REQUEST  : https://kolbi.cz/blog/2017/11/10/setdefaultbrowser-set-the-default-browser-per-user-on-windows-10-and-server-2016-build-1607/
    ===: R03 | Post Data String: redirection-delay=45
    ---: R03 | RESPONSE : Cached:true  : Duration:0.003 seconds
    ---: R04 | REQUEST  : https://kolbi.cz/blog/2017/11/10/setdefaultbrowser-set-the-default-browser-per-user-on-windows-10-and-server-2016-build-1607/
    ===: R04 | Post Data String: redirection-delay=45
    ---: R04 | RESPONSE : Cached:true  : Duration:0.003 seconds
    ---: R05 | REQUEST  : https://kolbi.cz/blog/2017/11/10/setdefaultbrowser-set-the-default-browser-per-user-on-windows-10-and-server-2016-build-1607/
    ===: R05 | Post Data String: redirection-delay=45
    ---: R05 | RESPONSE : Cached:true  : Duration:0.005 seconds
    ---: R06 | REQUEST  : https://kolbi.cz/blog/2017/11/10/setdefaultbrowser-set-the-default-browser-per-user-on-windows-10-and-server-2016-build-1607/
    ===: R06 | Post Data String: redirection-delay=45
    ---: R06 | RESPONSE : Cached:true  : Duration:0.003 seconds
    

     

  3. Looks like TechPowerUp is now using manual server selection, so clicking the button alone doesn't actually download the file, it just shows a page with the server selection. Parse that for "server_id" then use POST to download the file. Since Ketarin can't post to the download URL you'll have to shell it out in a powershell variable or use the pre-download command using something that can (Wget or Curl). This is usually pretty simply once you understand the syntax:

    curl.exe -v -X POST -L -o "file.ext" -d "id=164&server_id=12" -4 "https://www.techpowerup.com/download/techpowerup-real-temp/"

    This performs a verbose POST request, following redirects, saves the output to "file.exe", and POSTs the data "id=164&server_id=12" using IPv4 to the URL. 

    This doesn't actually download the file. There's an nginx proxy there that's refusing to actually allow the download. It's either blocking the UA or the referrer tree. It doesn't matter - the verbose response means that it's still showing you the "real" download URL which you could capture and drop into the download URL in Ketarin and that will actually work. 

    If you wrap this in a powershell variable you can capture the download URL. I don't have time today to demonstrate but I will try to come back in the next couple days to show you if you haven't figured it out.

     

    I've attached the app profile for SetDefaultBrowser which uses Kuppet (though it looks like it's now EOL and being replaced by a more powerful tool). 

    SetDefaultBrowser.xml

  4. Welcome aboard @Mundee. This is demonstrated pretty well in this thread.

    While Ambimind uses variables for the parts of the calling function, if you already know the name, type and form of the variable, then you could use the abbreviated syntax. For Start/End and RegEx you use:

    $x = $app.variables.MyVersionVariable.CachedContent

    For Textual Content use:

    $x = $app.variables.MyVersionVariable.TextualContent

    In both samples "MyVersionVariable" is the name of the variable you'll be using instead of {MyVersionVariable}.

  5. So the reason why the "downloadid" was failing is because you set the POST data within it. The downloadid should be used to parse *for* the ID value. Then the download_url will work correctly. If the ID remains consistent between all builds then you could probably hard-code it, but I would rather just parse for it to be sure.

    Here's the fixed XML:

    <?xml version='1.0' encoding='utf-8'?>
    <Jobs>
      <ApplicationJob xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Guid="bd752d5c-099d-4187-83e7-2ddb9cf3d546">
        <Category>System Maintenance &amp; Security</Category>
        <WebsiteUrl>http://www.techpowerup.com/realtemp/</WebsiteUrl>
        <UserAgent>Mozilla/5.0</UserAgent>
        <UserNotes>[Description]
    Real Temp is a temperature monitoring program designed for all Intel single Core, Dual Core, Quad Core and Core i7 processors.
    
    Each core on these processors has a digital thermal sensor (DTS) that reports temperature data relative to TJMax which is the safe maximum operating core temperature for the CPU. As your CPU heats up, your Distance to TJMax will decrease. If it reaches zero, your processor will start to thermal throttle or slow down so maximizing your distance away from TJMax will help your computer run at full speed and more reliably too.
    
    
    [Official Download Sources]
    http://www.techpowerup.com/downloads/SysInfo/Real_Temp/
    
    
    [Changelog]
    http://www.techpowerup.com/realtemp/
    
    
    
    ----------
    corrections and improvements are welcome - @DHT (Ketarin forums)</UserNotes>
        <LastFileSize>330853</LastFileSize>
        <LastFileDate>2024-03-01T09:34:05.8630984</LastFileDate>
        <IgnoreFileInformation>false</IgnoreFileInformation>
        <DownloadBeta>Default</DownloadBeta>
        <DownloadDate xsi:nil="true" />
        <CheckForUpdatesOnly>false</CheckForUpdatesOnly>
        <VariableChangeIndicator />
        <HashVariable />
        <HashType>None</HashType>
        <CanBeShared>true</CanBeShared>
        <ShareApplication>false</ShareApplication>
        <ExclusiveDownload>false</ExclusiveDownload>
        <HttpReferer />
        <SetupInstructions>
          <SetupInstruction xsi:type="StartProcessInstruction">
            <EnvironmentVariables />
            <FileName>"{file}"</FileName>
            <Parameters />
            <WaitForExit>true</WaitForExit>
          </SetupInstruction>
        </SetupInstructions>
        <Variables>
          <item>
            <key>
              <string>version</string>
            </key>
            <value>
              <UrlVariable>
                <RegexRightToLeft>false</RegexRightToLeft>
                <VariableType>StartEnd</VariableType>
                <Regex>(?&lt;=temp )[\d.]+</Regex>
                <Url>https://www.techpowerup.com/download/techpowerup-real-temp/</Url>
                <StartText>&lt;title&gt;Real Temp </StartText>
                <EndText> Download</EndText>
                <TextualContent />
                <Name>version</Name>
              </UrlVariable>
            </value>
          </item>
          <item>
            <key>
              <string>download_url</string>
            </key>
            <value>
              <UrlVariable>
                <RegexRightToLeft>false</RegexRightToLeft>
                <VariableType>Textual</VariableType>
                <Regex />
                <Url />
                <TextualContent>https://www.techpowerup.com/download/techpowerup-real-temp/?id={downloadid}</TextualContent>
                <Name>download_url</Name>
              </UrlVariable>
            </value>
          </item>
          <item>
            <key>
              <string>previous</string>
            </key>
            <value>
              <UrlVariable>
                <RegexRightToLeft>false</RegexRightToLeft>
                <VariableType>Textual</VariableType>
                <Regex />
                <PostData>3.70</PostData>
                <TextualContent>3.70</TextualContent>
                <Name>previous</Name>
              </UrlVariable>
            </value>
          </item>
          <item>
            <key>
              <string>downloadid</string>
            </key>
            <value>
              <UrlVariable>
                <RegexRightToLeft>false</RegexRightToLeft>
                <VariableType>RegularExpression</VariableType>
                <Regex>name="id" value="(\d+)"</Regex>
                <PostData />
                <Url>https://www.techpowerup.com/download/techpowerup-real-temp/</Url>
                <TextualContent />
                <Name>downloadid</Name>
              </UrlVariable>
            </value>
          </item>
        </Variables>
        <ExecuteCommand>"{winrar}\winrar.exe" x -ad -ibck -o+ "{file}" "{file:directory}"</ExecuteCommand>
        <ExecutePreCommand />
        <ExecuteCommandType>Batch</ExecuteCommandType>
        <ExecutePreCommandType>Batch</ExecutePreCommandType>
        <SourceType>FixedUrl</SourceType>
        <DeletePreviousFile>true</DeletePreviousFile>
        <Enabled>true</Enabled>
        <FileHippoId />
        <LastUpdated>2024-03-01T09:34:05.8630984</LastUpdated>
        <TargetPath>{root}{apps}\{category}\{appname}\</TargetPath>
        <FixedDownloadUrl>{download_url}</FixedDownloadUrl>
        <Name>_ Real Temp (Portable)</Name>
      </ApplicationJob>
    </Jobs>

     

    The Logitech Options app profile I posted a while back doesn't work now. Logitech has changed their site so many times recently that this particular code doesn't work anymore, and I don't know if/when I'll be inclined to pursue making one that works again. 

     

    Kuppet requires you to create a firewall rule in order for the local server to run. Assuming you're using the native Windows Firewall, you could whitelist the application or the port. It looks like you're using port 9000 so you can do it with this:

    netsh advfirewall firewall add rule name="Kuppet" dir=in protocol=TCP localport=9000 action=allow enable=yes profile=any localip=any remoteip=any interfacetype=any

    To later remove it use:

    netsh advfirewall firewall delete rule "Kuppet"

    This will ensure that the firewall allows Kuppet to operate as a standalone server on your computer.

    I also recommend you change the definition for the "run_kuppet" variable to:

    if(!(PS kuppet -ea 0)) {START -WindowsStyle hidden BIN\kuppet 9000}

    This will open Kuppet interactively - what you'll see is basically just a powershell window showing the log of actions. Use this to see whether it is loading correctly, and whether the requests are being processed correctly. There's a bit of a learning curve.

    One issue with Kuppet is that by default it uses the "HeadlessChrome" user-agent, which many web servers block by default. You'll need to configure a kuppet.config file with the user-agent you wish to use. I show how to automate this process here

     

  6. For TechPowerUp you can use the download page (the one you linked to) then collect the hidden "id" value from it. That's 164 for this app. I name this field "downloadid". With that parsed the URL to download becomes:

    https://www.techpowerup.com/download/techpowerup-real-temp/?id={sdownloadid}

    The site uses POST in the source code, but I tested way back in 2015 or so when I created a download profile for NVcleaninstall and you can use GET and the download will work fine. If that wasn't possible (if they actually checked for POST vs GET) then the next best option would be to perform a POST operation (using the "POST data" button) to get the raw file URL. 

     

    For Cheat Engine you'll need to use a different method. The download URLs generated by cloudfront are unique and evil and rely on HTML5 javascript behaviors that you can't perform with Ketarin alone without massive effort. For these you need to use a browser puppeteer - a scriptable full browser that you can control externally - there's a flavor built for us here by @Ambimind called Kuppet, get it here on the forum.

    One of the methods cloudfront uses to "prove" the visitor is human is to insist on a delay before rendering all of the content. For this you'll need to use the "redirection-delay" option. I'm not in a hurry so my redirection delay for any sites that impose one is set to 45 seconds. It feels like a long time (it's not), but it guarantees that sites that impose this delay behavior will work. I'd rather have it work reliably than stall out because I tried to push the envelope.

    Just don't go too large because some sites have an idle timer, too, which either refreshes the page or redirects you to their home page after a longer delay, usually 5-15 minutes of inactivity. These webmasters suck because you don't always finish the article before you're thrown to a different page or place on the page when it triggers. Grrr. /soapbox

    Please try it and post your XML if it's still not behaving.

  7. Since the download link is to a different domain, you might be better off using regex to parse for the download URL instead of constructing it from logical elements like version and extension. I use something like this for pretty much all of the downloads where the download is on a different domain:

    "([^'"]+{version}[^'"]+x64\.msi)"

    When parsed against {url2} this should capture the complete download URL for the first file that includes the version number and ends with "x64.msi". The URL must be wrapped in double-quotes on-page. If there's a chance that there are multiple matches and you want to control it further then you can fiddle with the beginning exclusionary block as so:

    "(https://[^'"]+{version}[^'"]+x64\.msi)"
    
    or
    
    "(https://[^'"]+uvnc\.eu/[^'"]+{version}[^'"]+x64\.msi)"

    This will let you ensure that the download is from an HTTPS website for the first one and the second adds a specific domain or subdomain to the requirements. If there are language specific builds you can add that as an additional qualifier and just duplicate the "[^'"]+" on either side as so:

    "(https://[^'"]+en_US[^'"]+{version}[^'"]+x64\.msi)"

    In the case where they might be using a single quote to wrap attribute values instead of doublequotes (or they use them differently throughout the site) you can use this:

    ['"](https://[^'"]+{version}[^'"]+x64\.msi)['"]

    Where this type of thing will fail you is if there is a block of code on the site that is actually commented out but still matches the other syntax requirements or the real URL isn't actually wrapped in quotes. I've seen this several times over the years but unfortunately there's simply no way to completely prepare for when people add comments or leave old code in their page.

  8. i have them blocked on my network so i can't actually test it, but the most common issue with a website not allowing you to visit the same page you can in a browser or download when you have the correct URLs is the referer. Go to the Advaneed tab and set the "spoof HTTP referer" option to this URL and it will probably work: 

    https://uvnc.com/downloads/ultravnc.html
  9. This is actually very common. Instead of trying to work through the problem by interacting with the site, I find it's easier to just look at the code and see what it's doing under the hood. I've actually already been doing that for years specifically with the FS website. Below is an app profile for ZoomText 2022.

    <?xml version='1.0' encoding='utf-8'?>
    <Jobs>
      <ApplicationJob xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Guid="dbb50eaa-d9b1-40b8-b7ef-24d6f6a49e20">
        <Category>Tools</Category>
        <WebsiteUrl />
        <UserAgent />
        <UserNotes />
        <LastFileSize>552557944</LastFileSize>
        <LastFileDate>2022-11-30T11:59:15.5802449</LastFileDate>
        <IgnoreFileInformation>false</IgnoreFileInformation>
        <DownloadBeta>Default</DownloadBeta>
        <DownloadDate xsi:nil="true" />
        <CheckForUpdatesOnly>false</CheckForUpdatesOnly>
        <VariableChangeIndicator>version</VariableChangeIndicator>
        <HashVariable />
        <HashType>None</HashType>
        <CanBeShared>true</CanBeShared>
        <ShareApplication>false</ShareApplication>
        <ExclusiveDownload>false</ExclusiveDownload>
        <HttpReferer />
        <SetupInstructions />
        <Variables>
          <item>
            <key>
              <string>schangelog</string>
            </key>
            <value>
              <UrlVariable>
                <RegexRightToLeft>false</RegexRightToLeft>
                <VariableType>Textual</VariableType>
                <Regex />
                <TextualContent>https://support.freedomscientific.com/Downloads/ZoomText/ZoomTextWhatsNew#latest</TextualContent>
                <Name>schangelog</Name>
              </UrlVariable>
            </value>
          </item>
          <item>
            <key>
              <string>swebsite</string>
            </key>
            <value>
              <UrlVariable>
                <RegexRightToLeft>false</RegexRightToLeft>
                <VariableType>Textual</VariableType>
                <Regex />
                <TextualContent>https://support.freedomscientific.com/Downloads/ZoomText</TextualContent>
                <Name>swebsite</Name>
              </UrlVariable>
            </value>
          </item>
          <item>
            <key>
              <string>snotes</string>
            </key>
            <value>
              <UrlVariable>
                <RegexRightToLeft>false</RegexRightToLeft>
                <VariableType>Textual</VariableType>
                <Regex />
                <TextualContent />
                <Name>snotes</Name>
              </UrlVariable>
            </value>
          </item>
          <item>
            <key>
              <string>spc</string>
            </key>
            <value>
              <UrlVariable>
                <RegexRightToLeft>false</RegexRightToLeft>
                <VariableType>Textual</VariableType>
                <Regex />
                <TextualContent>zoomtext2022</TextualContent>
                <Name>spc</Name>
              </UrlVariable>
            </value>
          </item>
          <item>
            <key>
              <string>splatform</string>
            </key>
            <value>
              <UrlVariable>
                <RegexRightToLeft>false</RegexRightToLeft>
                <VariableType>Textual</VariableType>
                <Regex />
                <TextualContent>windows</TextualContent>
                <Name>splatform</Name>
              </UrlVariable>
            </value>
          </item>
          <item>
            <key>
              <string>sbits</string>
            </key>
            <value>
              <UrlVariable>
                <RegexRightToLeft>false</RegexRightToLeft>
                <VariableType>Textual</VariableType>
                <Regex />
                <TextualContent />
                <Name>sbits</Name>
              </UrlVariable>
            </value>
          </item>
          <item>
            <key>
              <string>svendor</string>
            </key>
            <value>
              <UrlVariable>
                <RegexRightToLeft>false</RegexRightToLeft>
                <VariableType>Textual</VariableType>
                <Regex />
                <TextualContent>Freedom Scientific</TextualContent>
                <Name>svendor</Name>
              </UrlVariable>
            </value>
          </item>
          <item>
            <key>
              <string>version</string>
            </key>
            <value>
              <UrlVariable>
                <RegexRightToLeft>false</RegexRightToLeft>
                <VariableType>RegularExpression</VariableType>
                <Regex>/([\d\.]+)/</Regex>
                <Url>https://support.freedomscientific.com/Downloads/OfflineInstallers/GetInstallers?product=ZoomText&amp;version=16&amp;language=enu&amp;releaseType=Offline</Url>
                <Name>version</Name>
              </UrlVariable>
            </value>
          </item>
          <item>
            <key>
              <string>sdownload</string>
            </key>
            <value>
              <UrlVariable>
                <RegexRightToLeft>false</RegexRightToLeft>
                <VariableType>RegularExpression</VariableType>
                <Regex>"(http[^'"]+exe)"</Regex>
                <Url>https://support.freedomscientific.com/Downloads/OfflineInstallers/GetInstallers?product=ZoomText&amp;version=16&amp;language=enu&amp;releaseType=Offline</Url>
                <TextualContent />
                <Name>sdownload</Name>
              </UrlVariable>
            </value>
          </item>
          <item>
            <key>
              <string>LastUpdate</string>
            </key>
            <value>
              <UrlVariable>
                <RegexRightToLeft>false</RegexRightToLeft>
                <VariableType>Textual</VariableType>
                <Regex />
                <TextualContent>20221130T1159</TextualContent>
                <Name>LastUpdate</Name>
              </UrlVariable>
            </value>
          </item>
          <item>
            <key>
              <string>LastVersion</string>
            </key>
            <value>
              <UrlVariable>
                <RegexRightToLeft>false</RegexRightToLeft>
                <VariableType>Textual</VariableType>
                <Regex />
                <TextualContent>2022.2211.5.400</TextualContent>
                <Name>LastVersion</Name>
              </UrlVariable>
            </value>
          </item>
        </Variables>
        <ExecuteCommand />
        <ExecutePreCommand />
        <ExecuteCommandType>Batch</ExecuteCommandType>
        <ExecutePreCommandType>Batch</ExecutePreCommandType>
        <SourceType>FixedUrl</SourceType>
        <PreviousLocation>K:\_Ketarin\Ketarin\..\Tools\ZoomText_2022-2022.2211.5.400.exe</PreviousLocation>
        <DeletePreviousFile>true</DeletePreviousFile>
        <Enabled>true</Enabled>
        <FileHippoId />
        <LastUpdated>2022-11-30T11:59:15.5802449</LastUpdated>
        <TargetPath>..\{category}\{appname:regexreplace:([\s\t\r\n\-\&amp;]+):_}-{version}.{url:ext}</TargetPath>
        <FixedDownloadUrl>{sdownload}</FixedDownloadUrl>
        <Name>ZoomText 2022</Name>
      </ApplicationJob>
    </Jobs>

     

    There are only a few things here that would need to be changed. The name of course, but if you just look through it for "ZoomText" you'll see each instance where it would need to be replaced with JAWS or jaws based on the context. 

  10. One workaround for this issue is to use powershell delays on specific downloads. There's a demonstration of this in the Wiki here at the bottom of the page. You create a global variable (updateDelay) with the content "sleep -s 5", then run that wherever you want to impose a delay. Doing so is as simple as "{updateDelay:ps}" within any other variable or context. You can use it multiple times within a variable if you need longer delays, or only put it on the download URL if you only want it to only delay actual downloads.

    I personally have Ketarin set to limit overall simultaneous downloads to only 2 and use delays like this on sites that misbehave when you make too many simultaneous requests for different pages. While this means that a full update check for all 1000+ apps can take ~105 minutes, I almost never have any error out.

  11. Assuming you're talking about the final local location, this is {file}.

    Assuming you're talking about the final URL, I always build this as {sdownload} and populate the download URL with that. I've used this in many instances to use external downloaders (like Megaget, aria2, curl and so on) with the "exit 3" behavior. I've posted examples here on the forum.

     

  12. This already exists. F2 will allow you to rename a variable. Highlight it in the list on the left of the Variables window and press F2 and it will prompt you for the new name.

    There are actually quite a few hidden gem keyboard shortcuts in Ketarin. For example, highlight several apps in the list and CTRL+C to copy them to an XML export, or CTRL+SHIFT+C to copy a tab-delimited list. 

  13. What are you using for "variable indicator for changes" and does the website use E-Tag, file timestamps, or other indicators of file changes? If you don't tell an app what you consider different it will have to base this information on data the server may not be providing. If you aren't actually downloading the file then E-Tag and other information that it would base this determination on are not available.

  14. You can configure your setup instructions to interact with the user or request input or perform pretty much any other activity that your user account has the rights to do, including prompting for elevation should the installation require that. There are efforts here to use Ketarin as a website monitoring system and as a task manager. These aren't its intended purpose, but it has great potential to be able to automate most daily tasks.

×
×
  • 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.