This project builds a small Windows launcher that waits until a Universal Audio ASIO driver is actually openable, then launches ASIO Link Pro.
It is designed to solve the issue where ASIO Link Pro starts too early at boot or logon, before the Universal Audio device is truly ready.
On startup, the launcher:
- Closes the target program if it is already running.
- Polls for a ready UA ASIO driver.
- Tries these drivers in order:
Universal Audio ThunderboltUniversal Audio USB
- If either driver can be opened successfully, it closes the target program one more time just before launch.
- Launches ASIO Link Pro.
- Exits.
By default, it is hidden and shows no console window.
If you pass --verbose, it will show a console window with debug output.
By default, the launcher starts:
C:\Program Files (x86)\ASIOLinkPro\x64\asiolinktool.exe
You can override this with --path.
To build a standalone single-file executable:
dotnet publish -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=trueThis produces one main EXE you can use directly.
After publishing, the executable will be in:
bin\Release\net8.0\win-x64\publish\CheckUadAsioLauncher.exe
That is the EXE you should point Task Scheduler at.
CheckUadAsioLauncher.exeCheckUadAsioLauncher.exe --verboseIf you want to test from Command Prompt or PowerShell before putting it into Task Scheduler, --verbose is helpful so you can watch what it is doing.
Shows debug output in a console window.
Example:
CheckUadAsioLauncher.exe --verboseSets how long the launcher will keep trying before giving up.
Default: 180
Example:
CheckUadAsioLauncher.exe --timeout 300Overrides the default target executable path.
Example:
CheckUadAsioLauncher.exe --path "D:\Apps\ASIOLinkPro\asiolinktool.exe"CheckUadAsioLauncher.exe --timeout 300 --path "D:\Apps\ASIOLinkPro\asiolinktool.exe" --verbose0= success, target was launched1= timeout or general failure2= invalid timeout argument3= target executable path not found
This is important.
If ASIO Link Pro is configured to start on boot/login by itself, disable that first.
Otherwise, it may launch too early before this launcher gets a chance to control startup timing.
Disable any ASIO Link Pro auto-start behavior you currently have, including:
- its own startup setting if enabled
- Startup folder entry
- existing Task Scheduler entry
- any other custom launcher you previously made
Open Task Scheduler and create a task that runs your published EXE at logon.
General
- Name:
Start ASIO Link Pro When UA ASIO Is Ready - Run only when user is logged on
Triggers
- New trigger:
At log on
Actions
- Start a program
- Program/script: point directly to your published EXE, for example:
C:\Path\To\CheckUadAsioLauncher.exe
Optional arguments, for example:
--timeout 300
or:
--timeout 300 --verbose
Conditions / Settings
- Use whatever you normally prefer
- Usually no special conditions are needed
Program/script
C:\Tools\CheckUadAsioLauncher.exe
Add arguments
--timeout 300
For the first few tests, you may want to use:
--verbose
so you can confirm it is:
- seeing the installed ASIO drivers
- trying Thunderbolt first
- falling back to USB if needed
- launching ASIO Link Pro at the right moment
After you confirm it works, remove --verbose so it runs hidden.
The launcher checks drivers in this order:
Universal Audio ThunderboltUniversal Audio USB
If Thunderbolt is present but fails to open, it will continue and try USB.
It succeeds if either one can be opened and reports channels.
The launcher closes the target program twice:
- once immediately at startup
- once again right before launching
This helps if the target process was already running at startup, or if something restarted it during the wait period.
The target process name is derived from the executable path. For the default path, that means it looks for:
asiolinktool.exe
- Log into Windows
- Task Scheduler starts the launcher
- Launcher waits until UA ASIO is truly openable
- Launcher starts ASIO Link Pro
- ASIO Link Pro now starts at the correct time, instead of too early
Run manually with:
CheckUadAsioLauncher.exe --verboseThis will show:
- what ASIO drivers were found
- whether Thunderbolt or USB matched
- whether the driver could be opened
- whether the target EXE path was found
Try a longer timeout:
CheckUadAsioLauncher.exe --timeout 300 --verboseEither:
- move ASIO Link Pro back to the default location, or
- use
--pathwith the correct full path
That would mean the ASIO open check is still not strict enough for your system. In that case, the launcher code could be tightened further to require a more specific ASIO initialization step before launch.
Default hidden run:
CheckUadAsioLauncher.exeVerbose with longer timeout:
CheckUadAsioLauncher.exe --timeout 300 --verboseCustom target path:
CheckUadAsioLauncher.exe --path "D:\Apps\ASIOLinkPro\asiolinktool.exe"Custom path + timeout + verbose:
CheckUadAsioLauncher.exe --path "D:\Apps\ASIOLinkPro\asiolinktool.exe" --timeout 300 --verbose