2.3.6 Deployment

Hi all,

New to this forum but have seen other posts about deployment of Arduino which don't really answer my specific question so I am hoping that posting this will help.

I have the 2.3.6 exe and it installs silently for all users just fine using the /S /ALLUSERS switches.

However, when non-admin users such as teachers or staff run the software, they are prompted to allow a Windows firewall rule followed by a bunch of drivers. Clearly, they cannot do any of this without admin rights.

Am I missing something here, are there more switches to the silent install command that takes care of all this or a different version of the software that doesn't prompt for these changes?

Thanks in advance

Hi @bankesy. The installer only installs the application.

The installer doesn't have any provisions for being able to configure firewall exceptions. You should configure those via separate operations from the installation. Note that there two separate firewall exceptions will be requested:

  • The Arduino IDE application itself (Arduino IDE.exe)
  • The mdns-discovery helper tool

The latter is used to provide support for the optional feature of being able to upload sketches to certain Arduino boards via the local network ("OTA"), such as you can see done in these tutorials:

https://docs.arduino.cc/tutorials/mkr-1000-wifi/wifi-101-ota/

https://arduino-esp8266.readthedocs.io/en/latest/ota_updates/readme.html#application-example

Arduino IDE automatically downloads and installs the mdns-discovery tool on the first run after a fresh installation.

If this feature will not be used then there is no need for a firewall exception for this application.

On the first run of a fresh installation of Arduino IDE, it checks to see if there is an existing installation of the "Arduino AVR Boards" platform that adds support to Arduino IDE for the popular boards based on the AVR microcontrollers (e.g., UNO R3). If the platform is not already installed, Arduino IDE automatically installs the platform.

After the platform is installed, Arduino IDE runs the platform's Windows "post-install script":

This script installs the USB drivers for the boards of the platform.

The system administrator should pre-install the "Arduino AVR Boards" platform along with Arduino IDE so that it will not be necessary for the installation to be performed the first time the user starts Arduino IDE.

They may find it useful to utilize the official command line tool named Arduino CLI for this purpose:

https://arduino.github.io/arduino-cli/latest/

The platform can be installed via Arduino CLI using the following command:

arduino-cli core install arduino:avr

Reference:

https://arduino.github.io/arduino-cli/latest/commands/arduino-cli_core_install/

By default, the core install command will execute the post-install script if the command is invoked in an "interactive" context (e.g., invoked via the terminal). Likewise, the command will not execute the post-install script if the command is invoked in a non-interactive context (e.g., invoked via a script). If you want to force the script to be executed regardless of context, use the --run-post-install flag in the command. If you want to force the script to not be executed, use the --skip-post-install flag.

@ptillisch

Thanks for this, is that post install script creating any files or folders anywhere that can be used as a detection rule for Intune? Presumably after the script runs, some directories are created somewhere?

I'm thinking, deploy the script to devices using Intune, then deploy the exe using Intune and if I have understood correctly, this will work as long as the firewall rule is in place.

Thanks

The script simply invokes Microsoft's Driver Package Installer tool (e.g., dpinst-amd64.exe), which performs the driver installation. The tool is bundled with the boards platform installation (because it is not included in the Windows installation):

https://github.com/arduino/ArduinoCore-avr/tree/1.8.6/drivers

I don't know exactly what the effects of the driver installation are, but the driver installation is performed in a standardized manner; rather than being something invented by Arduino.

You can get information about the Driver Package Installer tool from Microsoft's documentation here:

https://learn.microsoft.com/previous-versions/windows/drivers/install/dpinst-return-code

Unfortunately I am not knowledgeable in regards to Intune. However, I'm not sure it makes sense to focus on the script specifically. The script relies on the Driver Package Installer tool executables and driver files from the drivers subfolder of the Arduino AVR Boards platform installation. So if you only installed the script and tried to execute it, it would fail.

Is there a reason why my suggestion about using Arduino CLI to install the Arduino AVR Boards platform and execute the post-install script is not feasible/desirable?

I would recommend using a standalone installation of Arduino CLI (instructions here), but there is also a copy bundled with the Arduino IDE installation (Arduino CLI provides most of the non-GUI functionality of Arduino IDE under the hood) and you could use that copy of Arduino CLI if for some reason it would be inconvenient to install a standalone copy for the purpose of provisioning the system.

@ptillisch

Thanks for your reply, appreciate your patience. Probably just me being a bit silly but there doesn't appear to be any clear guidance or a simple way of deploying Arduino to multiple devices on an school network in an automated fashion.

But anyway, if the script needs drivers that are part of the Windows installation, could I deploy the app and then the script?

If standalone installation of Arduino CLI is the recommended method, are there instructions on how to deploy Arduino CLI to multiple devices, please? Again, Intune is the preference but any method will do.

Thanks

The script needs drivers that are part of the Arduino AVR Boards platform installation.

The drivers are not part of the Arduino IDE installation application. Arduino IDE does install the Arduino AVR Boards platform, but that is not done as part of the Arduino IDE installation process.

I'm not sure I understand what you mean by "the app". Are you referring to Arduino IDE, or something else?

The reason I recommend this over using the copy of Arduino CLI bundled with the Arduino IDE installation is because the bundled Arduino CLI is only intended to be used internally by Arduino IDE. There is nothing that stops that copy of Arduino CLI from being used directly, but we also don't make any effort to ensure that use case is possible. For example, the location of the arduino-cli.exe executable inside the Arduino IDE installation has changed over time, so if you had set up a system that relied on the previous location, you would have found the system stopped working when used with the newer version of Arduino IDE in which that change was introduced.

No. I don't expect that you would need any specific instructions.

Arduino CLI is a single small executable. It doesn't require any special installation. You can simply put the executable at any convenient location and proceed to use it.

We do provide a Windows Installer (MSI) package of Arduino CLI in case that will be more convenient than the simple ZIP package for your use case.

@ptillisch

Right, so everything stems from needing the Arduino AVR Boards platform, which gets installed via the Arduino CLI.

So the Arduino CLI needs installing to every Windows PC which requires Arduino IDE?

If yes, how does the Arduino CLI get deployed to every Windows PC without manually going to each one, please?

Not everything. Only the driver installation.

The firewall rules are not in any way related to the "Arduino AVR Boards" installation.

Are you referring to a standalone installation of Arduino CLI, or to the installation used by Arduino IDE?

If the latter, then yes, but that is taken care of by the Arduino IDE installer. You don't need to do anything to install the copy of Arduino CLI that is used by Arduino IDE.

As for the former, that is only needed under the following conditions:

  • You want to use Arduino CLI to preinstall the "Arduino AVR Boards" platform
  • You don't want to use the copy of Arduino CLI that is bundled with the Arduino IDE installation

I'm sure that whatever mechanism you are using to install Arduino IDE can be used to also install standalone copies Arduino CLI.

Are you the system administrator who is responsible for this task? If not, I recommend you speak to the system administrator. You might find that the information I have already provided here is sufficient for them to proceed without any additional guidance. I really don't see that the installation of Arduino CLI will pose any challenge at all for someone who is already able to perform the relatively more complex installation of Arduino IDE.

@ptillisch

Yes I am the IT Network Manager and think I am getting this, the CLI gets installed with IDE, the CLI can then be used to install the platform, and once the platform is there, I can deploy the post-install script to install the drivers?

Then hopefully, users will not be prompted to install the drivers and I just need to sort out the firewall rule.

Thanks

That is correct. It is at the following path relative to the root of the Arduino IDE installation:

resources/app/lib/backend/resources/arduino-cli.exe

That is correct.

Note that it is not mandatory to use Arduino CLI to install the "Arduino AVR Boards" platform (arduino:avr). You are also welcome to simply start up Arduino IDE and let it install the platform.

I suggested using Arduino CLI because when managing a large number of systems/accounts in an institutional environment the system administrator will often want to streamline and automate the operations as much as possible. A command line tool is ideal for that purpose. However, if you find that it is more convenient to use Arduino IDE instead, that is also a perfectly valid approach.

If you like, but you can also have Arduino CLI execute the script for you, as I explained previously:

If you like, you can even eschew the post-install script entirely and instead invoke dpinst-amd64.exe directly. The script code is mostly only providing support for 32-bit systems (by using the 32-bit build of the Driver Package Installer tool: dpinst-x86.exe) in addition to 64-bit systems (by using the 64-bit build dpinst-amd64.exe). But in 2025 it is unlikely that you are actually working with any 32-bit systems, since there is no 32-bit version of Windows 11 (and even with Windows 10, the 64-bit version was likely more prevalent).

It would be great if you would circle back here once you find a solution and provide a report of the solution you found. I'm sure others who are facing similar challenges using Arduino IDE in an institutional environment would be grateful for the information.