top of page
How it works

1 - How it works

To create a simplDeploy package, no scripting and no third-party dependency is required in your application. Creating a simplDeploy package is done directly from Visual Studio. A setup including landing page is created, which installs your application without administrator rights in the user profile. You can see how this works in the following section.

Create a package (.NET Framework)

Hint for .NET Core Projects

Creating Packages for .NET Core is also supported. The Documentation shows how to create a Package for .NET Framework, and much of the process remains the same for .NET Core Projects. However, you need to create a folder-publish-profile before publishing a .NET Core Projects. The Build-Settings (Platform, architecture, framework-dependency) are taken from that profile. Create a profile as follows:

 

 

 

 

 

 

 

 

 

 

 

 

 


 

In order to create a simplDeploy package please download and install the vs-extension from the vs-marketplace:

https://marketplace.visualstudio.com/items?itemName=simplDeploy.simplDeployForVisualStudio

After restarting vs open the project you wish to deploy. Open the context-menu the project-item in the "Solution Explorer" and you see a new option "Tie up a simplDeploy-Package...".

folderprofile.png
publish.png
ScreenOne_.png

Select the option and the following assist opens. A new file is added to your project called "simplDeploy-packager.config".

SCreenTwo.png

Assembly Information

You can configure several settings:

  • Icon (This is loaded from the icon setting of the project properties)

  • Build Configuration (typical Release or Debug)

  • Product (this is loaded by default from the assembly-information-section of the project properties)
    .NET Project-File: <Product>

  • Publisher (this is loaded by default from the assembly-information-section of the project properties)
    .NET Project-File: <Company>

  • Version (this is loaded by default from the assembly-information-section of the project properties)
    .NET Project-File: <AssemblyVersion>

We recommend to keep the settings in the assembly-information-section of the project properties synchronous with the package-settings. Use the button "Load from assembly" to keep them synchronous.

assemblyinformation.png

Deployment Targets

Define one or multiple deployment targets. A deployment target is meant as source of installation. Defining multiple targets makes sense if you have for example multiple customers and you want du deliver new versions isolated from each other or if you have a testing environment beside your production environment you may like to deliver updates separately.

  • Root-URL You package will be located at this url. Make sure your users have access to this url. Update are installed from this url. It is not currently impossible to use file-url's. If you are used to work with file-URL's just setup an IIS on a central server and use the server-name as root-url.

  • Destination folder Specify where the package-output for the actual deployment-target should be created. For convenience you could publish directly to the location of the root url, but we recommend not to do so to avoid mistakes. If you use default destination folders (checkbox activated) the package is publishes at in a subdirectory of your project folder called "simplDeploy"

Ready to package!

Now you are ready to go. Just Click on Package to create your first simplDeploy-Package. Once you started the process the console shows output like this:

Build product-project 'This is my Fancy app\This is my Fancy app.csproj' with build-config 'Debug'
==================================== 1 Package/s for [simpleDeploy 1] are being tied up ======================================
Reset destination version-folder 'C:\Workspaces\simplDeploy\src\SimplDeploy\This is my Fancy app\simplDeploy\https!!!root.com\1.0.0.5'
Copy furniture-item 'C:\Workspaces\simplDeploy\src\SimplDeploy\This is my Fancy app\bin\Debug\This is my_Fancy app.application'
Copy furniture-item 'C:\Workspaces\simplDeploy\src\SimplDeploy\This is my Fancy app\bin\Debug\This is my_Fancy app.exe'
Copy furniture-item 'C:\Workspaces\simplDeploy\src\SimplDeploy\This is my Fancy app\bin\Debug\This is my_Fancy app.exe.config'
Copy furniture-item 'C:\Workspaces\simplDeploy\src\SimplDeploy\This is my Fancy app\bin\Debug\This is my_Fancy app.exe.manifest'
Copy furniture-item 'C:\Workspaces\simplDeploy\src\SimplDeploy\This is my Fancy app\bin\Debug\app.publish\This is my_Fancy app.exe'
Copy furniture-item 'C:\Workspaces\simplDeploy\src\SimplDeploy\This is my Fancy app\bin\Debug\Videos\Chris Sharma - BACK in Céüse - Sport climbing and bolting in France.mp4'
Copy furniture-item 'C:\Workspaces\simplDeploy\src\SimplDeploy\This is my Fancy app\bin\Debug\Videos\Chris Sharma - Sterling and Climbing.mp4'
Copy package-template ...
Create package-manifest ...
Prepare package ...
Build package ...
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSBuild.exe
Move package to destination folder ...
Remove package-template ...
Create landing page ...
Copy package and landing-page into version destination folder > _rootBak (for possible restore of the version) ...
package roots at 'https://root.com'
package successfully created in 'file:///C:/Workspaces/simplDeploy/src/SimplDeploy/This%20is%20my%20Fancy%20app/simplDeploy/https!!!root.com'
=============================== 1 Package/s for [simpleDeploy 1] have successfully been tied =================================

You've just created your first simplDeploy package. Jump into the output folder to grab the deployment result. Make sure you copy it over to the root url. Navigate to the root url and you should see a landing page like this:

landing-page.png

Click "Settle Package" to test download an installation of your package.

2 - In app updat (nuget-packag)

2 - In app update (nuget-package)

Sometimes you want to keep control when to update yourself. This is also helpful if you don't want to rely on the user to start the application from the start menu. Therefore we've create a Nuget-Package to serve this purpose. The Nuget-Package is completely optional an does not replace the VS-Extension by any means.

https://www.nuget.org/packages/simplDeploy.Integration/

Integrate simplDeploy into your application

Activate the setting "Use in app update" in your deployment settings

Add Nuget-Package simplDeploy.Integration to your Main-Project (The one that is the entry-point into your application).

Check for updates inside your application by calling <var result = awaitUpdater.CheckForUpdatedPackage()>. You get a result and if <result.UpdateAvailable()> returns true you run <result.RunUpdatedPackage()>. To avoid exceptions in development-state call Updater.ApplicationIsDeployedAsSimplDeployPackage() and skip check if false.
If you want to get the version currently installed call Updater.GetCurrentInstalledPackageVersion().

This code could look something like this:

private static async void CheckForUpdates() {
    if (!Updater.ApplicationIsDeployedAsSimplDeployPackage()) return;
    var result = await Updater.CheckForUpdatedPackage();
    if (!result.UpdateAvailable) return
;
    MessageBox.Show(
        "New version of Fancy App needs to be installed. Fancy App will close now."
        "Update available!"
        MessageBoxButtons.OK, 
        MessageBoxIcon.Information);
    result.RunUpdatedPackage();
    Environment.Exit(0);
}

Limitations:

Currently you cannot take control of the update-process itself you can only trigger the installer to update and restart the application. Hint: You could use "quiet mode" if you don't like the interactive mode.

InApp Update.png
BeQuietMayor.png
3 - Additional Options (Pass startup arguments, multiple Deployment Targets, Sign Package, Uninstall Procedure)

3 - Additional Options (Be quiet mayor!, User in-app update, Pass startup arguments, multiple Deployment Targets, Sign Package, Uninstall Procedure)

This is only a quick explanation of the different optional Settings

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Be quiet mayor!

This activates the quiet mode for your deployment. The Installation, Uninstallation and update-process is completely silent and without any user-interaction.

User in app update

This enables you to check for updates and notify the user from within your application. How to implement this consider reading "2 - In app update (nuget-package)".

Pass startup arguments to application

You can pass any commandline arguments in here. These are passed to your application on startup. This can bne especially be useful, if you have multiple "Deployment Targets" and want to add some customer-specific-parameters like the location of the config file or similar.

Multiple Deployment Targets

Use this if you need to publish to separate environments independently (for example stage and prod). You can add as many targets as you need with the little + button.

Sign Package

We recommend using a code-signing-certificate to sign your package. With this option enabled you have best chances to deploy a smart-screen and antimalware-friendly software. All exe-files are signed during the deployment process including:

- package.exe (used in initial startup)

- mayor.exe (used for update-checks)

- yourapplication.exe (your entry-point into the application)

Make sure you sign all additional .exe-files probably deployed within your application if you have some. For more information on signing yourself visit: https://docs.microsoft.com/en-us/dotnet/framework/tools/signtool-exe

Uninstall Procedure

Optional you can execute your own unistall procedure before the package is removed from the clients computer. This is useful if you need to remove anything but files from the computer for example unregister an office addin. Just enter a command-line argument, that tells your application that it's beeing ran in uninstall-mode. Once you procedure has finished the regular uninstallation is beein proceeded.

no marks.png
4 - Automate your deployment

4 - Automate your deployment

 

You like automation? We too. We deliver a built-in command-line-interface to automate your deployment. Just navigate the extension folder of your simplDeploy-VS-Extension similar as:

%LOCALAPPDATA%\Microsoft\VisualStudio\VSVERSION\Extensions\j12ooczd.5q5(some random stuff)

Here you find simplDeploy.Packager.exe

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Just run it and consult /? option. I'll explain itself to you. Enjoy!

simplDeploy.Packager.png
5 - Optimize for Terminal-Server-Environmets

5 - Optimize for Terminal-Server-Environmets

One of the main goals we had in mind since version 1 of simplDeploy was to make a terminal-server friendly deployment-solution. Therefore we offer several specific features optimized for the purpose.

Install and Uninstall by command-line-interface

Each .simplDeploy-package.exe supports command-line-installation by default. When your package is beeing ran in the command-line mode the following changes:

- No Dialogs are displayed

- Should an error occur during installation or uninstallation a log-file is created with the corresponding detail-information.    The installer quits with code greather than 0

With one simple command your software can be packaged with any software-distribution-solution (typically used in multi-user environments). There's no need to update your package once a new version has been released. The installer automatically downloads the latest-package version and only exits after the new package has been installed.

To see how it works just navigate in the console into the folder you've downloaded your deployment and ask it for options /? like this:

commandlineinterface.png

I'll explain itself to you. Enjoy!

What happens to user that do not have permission to write into startmenu

Since Terminal-Server-Environments often Share Startmenus with all users they don't have write acces to it. The installer will determine wheather a shortcut can be created if not it'll create one on the Desktop. If there's already a corresponding shortcut in the Startmenu (created by an administrator) there is no Shortcut created on to the Desktop of the user. Also the Shortcut uses Environment-Variables, so that it works for all users.

Folder-Inclusion-Policies

If you don't want your applications to be removed after each logout (typically the case in Terminal-Server-Environments). Ask the IT-Department to add a Folder-Inclusion-Policy for your Package and your good to go:

For example %LOCALAPPDATA%\simplDeploy\packages\https!!!lyoursupercoolapp.com!

Redirect Installation Folder

If you like it better you could redirect the simplDeploy-installation-folder with the user-environment-variable %SIMPLDEPLOY% Just add it to the users variables like this

Environementvariabkle.png

IMPORTANT NOTICE: If you want to use this, make sure the clients computer has been restarted at least once after the variable has been added to avoid missbehaviour of the installer.

If you point the variable towards a unc-path make sure you configure enable the following GPO to avoid blank icons!
Computer configuration/Administrative Templates/Windows Components/File Explorer/Allow the use of remote paths in file shortcut icons

6 - Troubleshooting

6 - Troubleshooting

Blocked Files on Updating

You're App is updating itself, using the nuget-package. Every time you update your application you run into Issues with blocked files like this:

BlockedFile.png

If you have a look in your Taskmanager, there is another Instance of simplDeploy.Mayor.exe running.

This is most likely caused by a missing setting in your simplDeploy-packager.config-File. Make sure to Enable "Use in app update":

InAppUpdate.png

This is not complete...

We're working on it. Thank you very much for your patience. If you can't figure out something, please do not hesitate to contact us. Thank you

bottom of page