Working with VS2017 Community I have written a service that works on my local machine. I followed the instruction here:
https://learn.microsoft.com/en-us/dotnet/framework/windows-services/walkthrough-creating-a-windows-service-application-in-the-component-designer
and installed it successfully using Installutil.exe (as per instructions in above link). All good.
I now want to deploy that across six servers in our organisation. In Microsoft's documentation about installing services (https://learn.microsoft.com/en-us/dotnet/framework/windows-services/how-to-install-and-uninstall-services) it says:
If you’re a developer who wants to release a Windows Service that users can install and uninstall you should use InstallShield
and links to a page that applies to VS2012 (can't post any more links as my reputation<10)
I have downloaded and installed the "Microsoft Visual Studio 2017 Installer Projects" package, which allows me to create a Setup Project. When I run it, it installs the project output correctly (i.e. copies the exe & dll files to the correct folder in Program Files) but does not create the service.
There's a detailed post about deploying services on this site (question 9021075) but when I follow those instructions I get a 1001 error on Install.
All the documentation I can find refers to earlier versions of VS or the previous Installer package, so I'm not even certain if I can do it with the software I am using.
So, with VS2017 Community using Microsoft Visual Studio 2017 Installer Projects, how to I create a stand-alone Installer to deploy a service that works correctly when installed locally using InstallUtil?
Or can I use InstallUtil on the target machines? I think I'd need to install Visual Studio on them for that, which I'd prefer not to. Is there a quicker way?
I only have 6 servers to install this on, so even some manual work-around might do.
Thank you for the responses. I now have a solution. I found InstallUtil on the Target Server (in my case it was in C:\Windows\Microsoft.NET\Framework64\v4.0.30319 but search will find it). I copied and added that to my project as content so when I now deploy it, I have InstallUtil in the same folder as my EXE.
To install, I run CMD as admin, cd to project folder and issue command:
installutil.exe myService.exe
This is a one-off task. Once the service is working, to update it I just need to stop it, upload the new myService.exe (& any DLLs) to overwrite the old ones and restart it again.
Further information about settings you're using for the serviceProcessInstaller1 and serviceInstaller1 files will be needed to debug this issue, as the 1001 error raised by the installer is a generic error.
An alternative way of doing this is to use Topshelf, which is a framework for hosting services written using the .NET framework. It simplifies the creation of services, allowing developers to create a simple console application that can be installed as a service using Topshelf. The reason for this is simple: It is far easier to debug a console application than a service. And once the application is tested and ready for production, Topshelf makes it easy to install the application as a service.
Alternatively, you could use InstallUtil.exe. It is part of the .NET Framework, so no need to install Visual Studio.
Related
I have a .Net 4.7 application which is developed as a windows service. I have an MSI project which does the installation and there is a post install activation script that also gets executed (manually).
I am trying to replicate the old installer using the Advanced Installer Extension in Visual Studio and cant resolve these issues.
The first one is how do I stop Advanced Installer from creating multiple subdirectories in the target installation location. The install parameters have the Application folder set to [ProgramFilesFolder][Manufacturer][ProductName] however, I am getting [ProgramFilesFolder][Manufacturer][ProductName][ProductName]. I have the project Output under the Application folder in the files and folders tab.
Secondly, how do I install the application as a Windows Service. I can see this in the external version of Advanced Installer when I create a new package, but can't find the settings for the one within Visual Studio for the existing package.
Within Advanced Installer extension for VS you cannot configure the install location template, nor a service installation. As you already noticed those settings are available only in the desktop version of Advanced Installer.
As a workaround you can use the [Edit in Advanced Installer] button from VS and then edit the install location template from Install Parameters view in Advanced Installer desktop app.
Also, while in Advanced Installer desktop app you can configure a service installation as exposed in this tutorial.
I need to generate an installer for my application but first I need to know if it is already installed on the system node.js, npm and other applications
Is it possible to include the installation of node.js within the installation of my application and to know if it is already installed?
I'm using Visual Studio 2017 and a WPF project for desktop applications
When the application is already installed I need to execute npm commands in the console for this reason I need to install them before or verify if they are installed correctly
I appreciate any help.
UPDATE: Advanced Installer: How to install a NodeJS web app. Really excellent videos IMHO.
Best Effort: I don't know much about Node.Js, and hence should not answer. But I haven't seen anyone else answering these questions either. Despite lacking experience, let me try to give a few suggestions.
Windows Installer: There seems to be an MSI you can use to deploy Node.Js. And there are some alternatives listed. (Essentially Chocolatey and Scoop).
Heads-Up: I have answered a more specific deployment question relating to a failed installation of the Node.Js MSI earlier: Node.js installation (windows installer) terminates prematurely on windows 10 64-bit. This may or may not be fixed.
Deployment: To deploy a prerequisite MSI before your own package installation, you can use a deployment tool capable of bootstrapping / sequencing / downloading - in other words to run several installation operations in a given sequence wrapped as a setup.exe. Or you could investigate the Chocolatey approach. With regards to the deployment tools, I am a bit tired of writing up the list of capacities these tools have and don't have. I will link to a few flavors of answers for this:
Prime Suspects:
Installshield Suite Projects - screenshot of Suite projects.
WiX Burn Bundle - beware: link overload. But there is a "Hello Burn" example. Official WiX documentation.
Advanced Installer - Prerequisites View - screenshot of view available in some project types.
One of the above tools should be able to do the job. Only WiX Burn is free and open source. Sometimes you can save a lot of time by going with a commercial tool. Obviously especially if your company already have a license for such a tool (which can be a days work to figure out).
Free Tools: In the realm of free-tools only and alternatives to WiX, some people use self-extracting archives made with 7-Zip and WinRAR and some other tools described here: Combine exe and msi file in one installer. I don't like this for security reasons and other reasons as explained in the link.
Simplicity: For corporate deployment a simple batch file or some custom construct distributed via your deployment system (SCCM, etc...) could suffice. Or even a zip with an embedded batch file to kick off your zipped installers in sequence could work. All depends on your scenario. I wouldn't roll with such an approach for global distribution.
And here are several other answers where I describe available deployment tools:
How to create a MSI file which simply copies a directory to Program Files?
Visual Studio 2017 Installer Project - include VC++ 2015 Redistributable
Some Links:
Create MSI from extracted setup files
Error Creating a 7-zip installer package
How to create windows installer
What installation product to use? InstallShield, WiX, Wise, Advanced Installer, etc
Nodejs - Another installation is in progress
I have built an Application using visual studio 2010 and a setup using the Visual Studio installer. Now what I want is whenever the exe is installed on a client machine it should check for updates regularly.
Any Suggestions . Please Help.
It's my experience that most people do this in the app itself, so that when it runs it checks your web site for updates.
Basically you need a web service call to which your app passes the ProductCode and Version of your setup, your MSI file build. At your web host you need a database (or Xml file) that has information on the latest available version and it's download location so that you can return that information to your app, assuming the latest version is higher than the running one.
You're in Visual Studio, so you build a RemovePreviousVersions updated MSI, and that's what you download and install. If the install needs admin rights and your app isn't elevated than you'd launch an external exe with an elevation manifest to get it installed.
I just finished a project similar to this, but instead of using Visual Studio installer libraries, I created a windows service that runs on a 10 minute loop, and when the service detects a new version, it kills the running application and performs a download and copies the new files into the application folder.
There are a few things you need to take into consideration; 1) A way to gracefully warn and then close the application so the user is not angry over a forced kill of the application. 2) A web location to store the upgraded application files, and a web service to advertise the available application versions. 3) A way to queue the upgrades so that when a new version is released not every client will be upgraded at once (flooding your web server with upgrade requests and downloads).
This technique is used by Adobe for upgrading and installing applications such as Acrobat Reader and Flash.
I have a package I am putting together that contains the following components:
Core windows service
Core web service ( requires windows service )
Secondary web service
Front end
This is designed for a distributed configuration, where the Core Windows and Core web services have to be installed on every machine, the Secondary web service only needs to be installed on one machine and the front end only needs to be installed on one machine.
All four can be co-located on one machine but aside from the core services having to be installed on the same machine they don't have to be.
All four projects have x86 and x64 variants.
Currently I have an installer for each component built as VS2010 deployment projects. This works fine, but it means a lot of files have to be copied and installed before we can get going and it is far too easy to miss one out. I would like to have an integrated installer that pulls them all together and then allows the user to suggest which components to install on any given machine.
Is there a way to do this with a Deployment Project in Visual Studio 2010? I don't believe I can chain MSI packages, but could I create a single one that deployed the windows service and web services to their various locations in such a way that the windows service was guaranteed to be installed before the web service and that all components can be optional with no installation directories created for components that aren't installed? If so, is there anything I can do to ensure that users only see relevant parts of the interface- showing panels conditionally based on previous checkbox responses or similar?
If not is the best alternative ( as suggested in this question ) to put together a simple Forms application to package the files up and chain them manually?
Take a look at Wix (Windows Installer XML). http://wix.sourceforge.net/ Its an add on to visual studio. You can create much more powerful and flexable msi installers with it than with the default VS projects.
I have an Office solution for Word 2007 that I publish using ClickOnce. When I publish it to a local directory, I can install the .vsto file and everything works. When I publish it to our web server, though, I cannot install it. The error I get is:
Downloading file:///C:/DOCUME~1/Dave/LOCALS~1/Temp/Application Files/MyApp_1_0_0_0/MyApp.dll.manifest did not succeed.
I have been Googling for most of the day, and have already tried the following:
Added the correct MIME types to IIS 6 config (as described here and here on MSDN).
Created a test certificate, imported it into my trusted root authorities, and signed the app with it.
Published the solution to a network share and tried installing from there. It worked fine.
Tried accessing the MyApp.dll.manifest file directly from the web URL. The browser is able to find the file just fine.
What am I missing? Thanks.
Make sure that Windows Installer 3.1 is installed on the end-users PC. If it's not, you may want to add it as a prerequisite to your application.
Also, you may want to check and see if the application is installed from the Windows Add/Remove Programs screen. If it is in the list, you may need to uninstall the application, first. I know, you're probably thinking 'But the application hasn't been installed yet.'
Quite a few application that are published via ClickOnce. ClickOnce works great most of the time, but every now and then I see users who run into hiccups similar to yours when they try to initially install the application. The best solution is to usually uninstall all prerequisites, reboot, manually re-install the prerequisites (not from the ClickOnce setup.exe file) and then launch the application.
Some of those steps may not be necessary but it tends to fix the problem nearly every single time.