The Core Technologies Blog

Professional Software for Windows Services / 24×7 Operation


Essential Windows Services: Windows Time / W32Time

Windows Time Service

What is the Windows Time (W32Time) service?

The Windows Time service (W32Time) implements the Network Time Protocol (NTP) specification to synchronize the date and time of computers managed by Active Directory (AD).

It may not be obvious but keeping the clock accurate and synchronized with the rest of the domain is an essential task. That’s because modern authentication methods (like Kerberos V5) may fail when networked machines are not coordinated. As such, W32Time plays a key role on computers joined to Active Directory. Otherwise, it’s not really important.

The Windows Time service runs as LocalSystem inside the service host process, svchost.exe:

W32Time Windows Service

And because the service doesn’t need to run all the time on most systems, it’s often classified as Manual (Trigger start). In that case, it only wakes up to run if:

  1. a program or another service asks it to start, or

  2. whenever a one or more Windows “trigger” events occur.

Indeed, if you examine the trigger events with our free Service Trigger Editor utility, you will see that Windows will launch the service whenever “the computer joins a domain”:

Windows Time Service Triggers

That makes sense. When your PC joins a network, Windows Time jumps into action and synchronizes your clock if you’re connected to Active Directory. Afterwards, it stops and waits for the next network-join event or request to start. It’s a much more efficient way to operate versus starting at boot and running 24/7.


What happens if I stop W32Time?

If you’re working in a home environment or without Active Directory, not much will happen if you stop the Windows Time service. In fact, most of the time you will find that the service is idle on your computer.

And even if you’re in a corporate environment with networked PC’s, temporarily stopping W32Time should be fine. If it’s needed by a program or another service, they will simply start W32Time.


Is it OK to disable the Windows Time service?

It’s fine to disable the Windows Time service if your computer isn’t joined to Active Directory. But don’t expect a huge, CPU-saving impact because the service doesn’t spend much time running in that situation anyway.

However, if your computer is joined to Active Directory, you should keep the service active. You don’t want to have any trouble signing in to your PC!

In any case, if you insist on disabling the service you can do so the conventional way — by setting the Startup type to Disabled in the Services app:

Disable the Windows Time Service

After you make that change, no person or program will be able to start W32Time. It will be inert.

But if that’s not good enough and you really want to get rid of the service, you should run W32tm /unregister from an elevated command prompt. That command will stop the service (if necessary) and uninstall it from the list of services. Afterwards, Windows Time will be completely gone from your system.

Don’t worry; if you change your mind and the Windows Time service becomes your friend again, simply run W32tm /register to restore the service. You’ll be good to go.


Questions? Problems?

If you would like to know more about the Windows Time service, or you have a specific problem, please feel free to get in touch. We’ll do our best to help you!

Posted in Windows Services | Tagged , , , , | Leave a comment

How We Control Our AlwaysUp Applications From ChatGPT

How We Control Our AlwaysUp Applications From ChatGPT

Why integrate with AI?

The current generation of Artificial Intelligence (AI) is rapidly evolving. Indeed, we’ve moved from playfully going back and forth with conversational chatbots to relying on adept autonomous agents at breakneck speed.

And like every other software development shop on the planet, we’ve been thinking about how these astonishing new technologies will impact our corner of the world. In particular, can AI help our customers get more value from our professional products?

In our view, the answer to that question is a resounding “yes”. Even though it’s still early days, we anticipate a state where natural language will be the primary interface for most software, even desktop applications like ours. Why click when you can speak?

With that in mind, this article discusses one technique to bring AlwaysUp — our popular run-anything-24×7 tool — into the AI world. We’ll show how we connected AlwaysUp to OpenAI’s ChatGPT, so that we can effortlessly check, start or stop our applications from a chat interface. You’ll see how this work allows us to have conversations that take action, like this:

Start Google Drive from ChatGPT

Cool, right?

What does integration look like?

The “bridge” between ChatGPT — which runs in the cloud — and AlwaysUp — which runs on your computer — is our free AlwaysUp Web Service tool. When everything’s in place, we communicate with ChatGPT, ChatGPT tells AlwaysUp Web Service what to do and AlwaysUp Web Service manipulates our AlwaysUp applications.

This is what the final arrangement looks like:

ChatGPT driving AlwaysUp Web Service

The next section recounts how we implemented this solution.


How we connected AlwaysUp and ChatGPT

Step 1: Installed AlwaysUp Web Service

First, we installed AlwaysUp Web Service. We downloaded the installer, ran it, and followed the straightforward prompts to complete the deployment. It only took a minute to do that.

In the settings, we enabled HTTPS because it will be needed to communicate securely with ChatGPT later on:

HTTPS enabled in AlwaysUp Web Service

Step 2: Allowed AlwaysUp Web Service through the firewall

Next, we relaxed the computer’s Windows firewall rules to permit AlwaysUp Web Service to receive network traffic:

AlwaysUp Web Service allowed through the firewall

Step 3: Generated a SSL certificate for AlwaysUp Web Service

At this point, we generated a SSL certificate for our computer hosting AlwaysUp, auws.coretechnologies.com.

Afterwards, we copied both the SSL certificate and the key into the AlwaysUp Web Service certificates folder, overwriting the “certificate.pem” and “certificate-key.pem” files already there:

SSL certificate files installed

Doing so instructed AlwaysUp Web Service to use our new certificate the next time it started.

Step 4: Configured networking

To receive instructions from ChatGPT, AlwaysUp Web Service must be accessible from the Internet. Of course, there are several ways to do that, but for our situation we:

  1. Set up a port forwarding rule in our router to map port 443 to port 8585 on the machine where AlwaysUp Web Service is running:

    Port forwarding configured
  2. Created a DNS A Record for auws.coretechnologies.com that points to the IP address of our router:

    DNS A record created

Those adjustments created a “tunnel” from the Internet to AlwaysUp Web Service. Afterwards, we were able to connect to the site from a web browser:

Connected to AlwaysUp Web Service

Almost there!

Step 5: Plugged AlwaysUp Web Service into ChatGPT

Next, we switched context to ChatGPT and deployed a new general purpose Custom GPT to interact with AlwaysUp. Even though that wasn’t necessary — using an existing GPT would have been fine — we thought it best to test in an isolated environment.

New Custom GPT created

To tell the GPT how to call AlwaysUp Web Service, we added a new Action. As shown in the next screenshot, we specified:

  • No authentication (we’ll handle that later)

  • The OpenAI schema for AlwaysUp Web Service (which was generated by ChatGPT itself from our published documentation!)

  • The URL of our privacy policy (required for publicly accessible GPT’s)

New GPT action added

You can see that the GPT discovered three endpoints — used to start, stop or get the status AlwaysUp applications.

However, when we tested the integration with the buttons at the bottom of the form, the operation failed because the password that ChatGPT used was incorrect. In any event, the GPT recognized the problem and was smart enough to request the password:

ChatGPT failed to get application status

Fortunately, the request succeeded once we supplied the MD5 hash of the password:

Get application status succeeded

At this point, it looked like we were all set. We confidently deployed the GPT to make it available to our team.

In the next section, we’ll take a look at how we’re using the integration today.


Examples of working with our AlwaysUp applications from ChatGPT

With ChatGPT involved, it’s now super easy to check what applications are running in AlwaysUp:

Checking running applications from ChatGPT

You can see that stopping an application is just as straightforward:

Stopping an AlwaysUp application from ChatGPT

As is starting an application:

Starting an AlwaysUp application from ChatGPT

Furthermore, the AI is smart enough to string together a stop and a start when asked to restart:

Restarting an AlwaysUp application from ChatGPT

To our delight, the new assistant is able to provide interesting information too. For example, it can tell us when an application was last started:

ChatGPT checking application start time

And with a little more information, it will happily compute application uptime:

ChatGPT computes application uptime

Apparently the GPT can also interrogate AlwaysUp’s settings because it’s able to report the correct Windows user account hosting an application:

ChatGPT reports user account information

So far, we’ve very, very impressed!


Your thoughts?

So what do you think about using AI with our products? Do you look forward to improvements and should we be pushing more aggressively in that direction? Or do you plan to limit your encounters with machine learning for as long as possible?

And if you’re on board with AI, what engines do you favor? At this point, neither Google Gemini nor Meta Llama offer the flexible integration points to make the work above possible, but that will surely change as the technologies evolve.

We’d love to hear your thoughts, so please share your impressions in the comment section below.

Posted in AlwaysUp Web Service | Tagged , , , , , , | Leave a comment

Q&A: Can I Group My Applications in AlwaysUp?

Can I Group My Applications in AlwaysUp?
  We are a licensed customer of AlwaysUp and its a great help to our services.

However one of the things I want to be able to do is “group” services into a logical set. That way you can see which services belong together visually in AlwaysUp, and more importantly you can start or stop all services in a group either through user interaction or through the AlwaysUp CLT. Also, when defining services through the CLT or XML, we’d like to set the group to fit into.

Do you think this is something that can be accommodated in a future release or something that may be even there right now and I can use? It will be useful for our product because it has a number of different services that need to start up together and shutdown together seamlessly.

Let me know. Thanks.

— Mac B

Hi Mac. Great question! It’s easy to see how being able to group your applications and operate on them as a unit is a very powerful capability.

The good news is that AlwaysUp already supports application grouping. It’s implemented through the use of tags, which work in the user interface and behind the scenes in the APIs as well.


What’s a tag in AlwaysUp?

A tag is simply a word or phrase that you assign to an AlwaysUp application. It can be anything you like. The only restriction is that spaces and semi-colons are not allowed.

For instance:

  • group1 is OK

  • group-1 is OK (dashes are recommended for readability)

  • group_1 is OK (underscores work great too)

  • group 1 is NOT OK (spaces aren’t allowed)

  • Group1 is OK (same as group1 because case is ignored)

  • onelongnamethatsnotveryreadable is OK (but long names are discouraged because they’re difficult to work with visually)

  • trading-apps is OK

  • trading;apps is NOT OK (semi-colons aren’t allowed because they’re used to separate multiple tags)

Hopefully you get the idea!

How do I use tags to create groups?

You create groups of applications by assigning tags.

For example, let’s say you’re running four Java applications as Windows Services with AlwaysUp — two for production and two pre-release versions for testing. In that case, tagging the production applications with “production” and the others with “testing” creates two groups, where:

  • The first group contains the two application tagged “production”

  • The second group holds the two applications tagged “testing”

Here’s what that arrangement looks like in AlwaysUp. Notice the Tags column, which shows the values associated with each application:

Java applications tagged in AlwaysUp

To show only the production applications, you would:

  1. Choose View > Filter Pane to show the filter controls

  2. In the Show only applications with tag dropdown, choose production.

The testing applications will fall away to leave the two production entries by themselves:

Applications tagged with production

From there, it’s easy to work with the production applications as a set. For example, you can select them all and restart them together.

Similarly, you can select the testing tag to show only the beta applications:

Applications tagged with testing

This way, it’s easy to handle them as a group — instead of dealing with them mixed in with the production applications.


How to tag an application in AlwaysUp

There are a couple of ways to tag an application in AlwaysUp.

Method #1: Add tags from the Application menu entry

After selecting the services you want to update, choose Application > Tags > Add from the menu:

Add tags to your AlwaysUp applications

In the Add Tags window, type in the tags you want to add. For example, we’re adding the “v2” tag to our production instances here:

Enter the new tags

You can add as many tags as you like there.

Click Next and complete the process. Afterwards, the new tags will show up on your applications, as they did for us:

New tags added

That’s the best way to update multiple applications at once.

Method #2: Add tags by editing your application

If you prefer to update each application individually, you can do so by editing the application. You’ll find the Tags field at the bottom of the General tab, where you can add whatever tags you like:

Edit your application's tags in AlwaysUp

You can edit the field to remove tags there as well.


Tags create groups in AlwaysUp Web Service and AlwaysUp CLT too

Indeed, tags and groups show up throughout the AlwaysUp family of products.

For example, AlwaysUp Web Service prominently displays the tags associated with your applications:

AlwaysUp Web Service shows your tags

(A future version will enable filtering by one or more values.)

Furthermore, to manipulate groups of AlwaysUp applications from third-party applications, developers can employ the AlwaysUp Web Service API. Several of the API methods — including the popular “Get Application Status” function — accept one or more tags as input, as described in the documentation:

The Get Application Status function accepts tags

Since you’re working from the command line with AlwaysUp CLT, you can add tags to your applications using the -tg parameter. That capability is described on page 9 of the user manual.

But if you prefer to work with XML, you can specify tags when installing your applications that way instead:

AlwaysUp XML: The tags node

Whatever works best for you!

Posted in AlwaysUp | Tagged , , , , , | Leave a comment

ServiceCommander 7: Larger Icons, More Services

ServiceCommander 7: Larger Icons, More Services

Hi everyone. This week, our team decided to give our free ServiceCommander utility some love. Here’s a quick roundup of the improvements.


ServiceCommander displays larger icons on the taskbar menu

Previous versions of ServiceCommander displayed 16×16 icons in the tray menu. That made for a very compact display — ideal to fit many Windows Services on-screen.

But the feedback from folks using the software was that the menu was too small. Apparently most users manage only two to five services and a more spacious user interface would make ServiceCommander easier to use.

Taking that feedback on board, we switched the icon size to 32×32. You can see what the new, roomier taskbar menu looks like in this screenshot:

ServiceCommander 7 screenshot

But you can switch back to small icons if you like

The new interface should be better for most users but what if you’re working with lots of services? The reality is that your screen may not be able to fit the longer taskbar menu if it contains more than twenty entries.

For users who want to pack in the pixels — and those who don’t need glasses just yet — we added a new option to use small icons on the menu.

To switch to the more compact menu display:

  1. Click the ServiceCommander icon to open the menu.

  2. Select Configure.

  3. In the Configure ServiceCommander window, switch to the Options tab.

  4. Check the Show small icons on the taskbar menu box:

    Show small icons on the taskbar
  5. Click the Done button to save your change.


ServiceCommander shows more services in the taskbar menu

When managing many services, the taskbar menu would only show up to 30 services. Any more than 30 would “overflow” into a “More Services” menu, which required an extra click to access.

ServiceCommander 7 removes that hard cap of 30 services and computes the limit based on the resolution of your screen. The end result is that you’ll see as many menu entries as your screen will hold.

ServiceCommander overflows to the More Services entry

For example, on our 2560×1440 display, we can fit 29 services without overflowing. However, if we switch to small icons, the more compact menu will accommodate up to 50 services:

ServiceCommander fits more services in the menu

ServiceCommander 7 is fully compatible with Windows Server 2025

This new release works flawlessly on Windows Server 2025. Fortunately we didn’t even have to change much code to support the new operating system — just a few behind-the-scenes routines.

Enjoy!

Posted in ServiceCommander | Tagged , , | Leave a comment

AlwaysUp 16 Handles Common Application Failures — So You Don’t Have To

AlwaysUp 16 Handles Common Failures, So You Don't Have To

As AlwaysUp enters its 21st year of babysitting important applications — and reducing interruptions during dinner time — we’re pleased to release version 16 to all customers.

Version 16 is a significant step forward. Most notably, the powerful sanity check feature has been overhauled to prioritize ease of use while retaining flexibility. And beyond that, a handful of fixes and improvements make life easier for anyone looking to run an application as a Windows Service. Dig into the details below.


AlwaysUp continuously monitors your application and quickly restarts it if it stops working

With regards to failure detection, AlwaysUp has always gone beyond the basics. Most notably, the powerful sanity check feature — which has been included since version 3 — allows you plug in your own executable and check for any kind of failure you like, not just crashes and hangs.

But plugging in a sanity check could be difficult. The truth is that not everyone has the time or expertise to write code or compose a batch file. And the somewhat predictable consequence, is that the sanity check feature was limited to the technically savvy.

AlwaysUp 16 changes all that. Now, anyone can introduce a sophisticated sanity check — in seconds.

For example, let’s say that the application you’ve installed as a Windows Service with AlwaysUp runs a HTTP/S web server. That’s a very common practice these days, as enterprise programs like Prometheus and ngrok illustrate.

You’ll probably want to make sure that the web server component doesn’t fail because if it does, you’d have to jump onto the server and restart the software. Here’s how you would set up a sanity check to guard against that:

  1. Edit your application in AlwaysUp.

  2. Check the Whenever it fails a periodic sanity check box and click the Set button on the right:

  3. In the Add Sanity Check window, choose Check that a web server is responding properly from the list and click Next:

    Choose the web server sanity check
  4. On this page, enter the URL of the page that AlwaysUp should check. That address will probably be rooted at localhost (or 127.0.0.1) since you’re checking a local application:

    Enter the URL to monitor
  5. After clicking Next, specify how often AlwaysUp should ping your web server:

    Specify the sanity check frequency
  6. Finally, confirm your settings and click the Add button to save your new sanity check:

    Confirm your sanity check

And with that sanity check in place, AlwaysUp will visit the URL every 5 minutes. If the URL doesn’t load — or returns an invalid response — AlwaysUp will promptly restart your application.

Check out the AlwaysUp sanity checks page for the full complement of built-in sanity checks available today.


No more errors when your script completes very quickly

Most customers rely on AlwaysUp to manage their long-running applications. In fact, keeping an executable running 24/7 is the norm. AlwaysUp launches those applications at boot and they never stop running until the machine shuts down (or something goes wrong).

But there’s another use case that has grown in popularity over the years. Instead of starting an application and expecting it to run for a long time, some customers use AlwaysUp to run a script over and over again. And in that scenario, the script may only run for a few seconds.

For instance, one customer uses AlwaysUp start a Python script that scans a folder and imports its files into a database. Once the script completes, they have AlwaysUp launch it again in fifteen minutes.

If there are lots of files, the script may run for 30-40 seconds. On the other hand, if there are no files, the script returns almost immediately because there is no work to do.

Unfortunately, that “quick exit” would occasionally confuse AlwaysUp. Did the script do its work and complete normally? Or was there a problem that caused it to abort? More pointedly, should AlwaysUp treat the speedy exit as success or failure?

Instead of trying to determine the answer programmatically — which has proven to be quite challenging — we decided to put you in the driver’s seat. After all, you understand your script much better than we do! 🙂

So if you’re running a program or script that can run and finish quickly — in less than five seconds — please enable this new option on the Restart tab:

Don't panic if your application completes very quickly

Once that’s in place, AlwaysUp won’t assault you with phantom errors when your application does its work and exits very quickly.


Other fixes & improvements

  • When setting up automatic logon to avoid Session 0, your auto-start applications will now be launched in the new session by default. That’s what most customers want. As a result, this option in the Autologon window will be checked by default:

    Auto-start AlwaysUp applications in the logon session

    Note that you can find the Autologon window by selecting Autologon from the Tools menu in AlwaysUp.

  • Improved efficiency when processing records from the Windows Event Logs. The new code makes a difference when AlwaysUp has to sift through tens of thousands of records in the System or Application logs.

  • When running a custom sanity check program/script, AlwaysUp will now treat a failure to launch the program as an inconclusive result. The application won’t be restarted, as it would have been in previous versions.

    We made this change to avoid spurious restarts, because those failures were likely unrelated to the application being monitored.

  • Full support for the official release of Windows Server 2025 (build number 26100.2605). Recent releases of AlwaysUp are also compatible with Server 2025, but version 16 is the best so far. 🙂

As usual, please review the release notes for the full list of features, fixes and improvements included in AlwaysUp version 16.


Upgrading to AlwaysUp 16

If you bought AlwaysUp version 15 (after December 2023), you can upgrade to version 16 for free. Simply download and install “over the top” to preserve your existing applications and all settings. Your registration code will continue to work as well.

If you bought AlwaysUp version 14 or earlier (before December 2023), you’ll have to purchase a discounted upgrade to use version 16. Please purchase upgrades here — you’ll save 50% off the regular price.

See the complete upgrade policy for additional details.

Thank you for reading!

Posted in AlwaysUp | Tagged , , , , , , , , | Leave a comment