I have a website developed using VS 2012 and created an MSI (Deployment Package) using the "Install Shield Limited Edition Project" available in VS 2012. While i am trying to install this application in a Win 7 system, it is creating a new AppPool as "ASP.NET v4.0 DefaultAppPool" and installing the application with this AppPool.
But if there are any previous application installed in the same system with the application pool as "DefaultAppPool", then my application's AppPool ("ASP.NET v4.0 DefaultAppPool") is getting applied for those previously installed applications (which has "DefaultAppPool" as its application pool) too.
Is there any settings that i am missing while creating the MSI using the Install Shield? Please advise on this
If you need flexibility in IIS installation the only serious alternative in my opinion is the open source WIX toolset.
I don't have time to write a proper answer right now, but please try these two earlier posts:
Wix generate single component id for entire tree
Warning in Wix Setup
Also check this post out to get an explanation of why WiX is best for this purpose. And definitely read the section on using dark.exe to decompile an existing MSI to get a WiX source file to start with.
Related
The problem
IIS ASP.NET Core module is unable to start an ASP.NET Core 2.0 app.
Browser: HTTP Error 502.5 - Process Failure
Windows Event Log: Application ‘MACHINE/WEBROOT/APPHOST/AppSite’ with physical root ‘C:\inetpub\apps\AppFolder\’ failed to start process with commandline ‘C:\inetpub\apps\AppFolder\App.exe’, ErrorCode = ‘0x80004005: 1’.
ASP.NET Core Module Log: Log file is created but is empty.
The setup
App: ASP.NET Core 2.0 targeting .NET Framework 4.6.1.
Server: Windows Server 2012 R2 Standard 6.2.9200 with IIS 8.5.9600.
The story
We've created a blank MVC Web application using the default project templates provided in Visual Studio 2017.
The app is deployed following the official specification: https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/.
The confusion arises mainly from these two points:
Running the app through command-line on Kestrel works.
Running a different app but targeting .NET Core 2.0 and publishing as framework-dependant works flawlessly on IIS.
But between these two apps: the codebase is the same, the IIS website and application pool is the same and we even emptied out the app directory and used the same one.
Due to these points the only difference seems to be the net461 app's executable file.
We do not have full control over the Windows Server where we're trying to deploy but we do have administrator accounts. The current assumption is that the issue lies within permissions - maybe AD group policies, antivirus blocking the file but we're still awaiting response from the client's sysadmins. Meanwhile we haven't been able to replicate the error code ‘0x80004005: 1’ while trying to setup these restrictions on our development machines.
Here's an incomplete list of ideas and points about the issue we've tried while problem solving:
The initial app (targeting net461) works flawlessly on IIS when
deployed to other servers (Windows 10 Enterprise, Windows Server 2012
R2 Datacenter).
Reinstalling different versions of ASP.NET Core/.NET Core: Runtime & Hosting Bundle.
Setting NTFS permissions to the dotnet folder.
Changing IIS application pool identity to an administrator account.
Restarting the server.
Going over local group and security policies.
Going over the antivirus settings and logs.
Trying to deploy on a brand new server (same OS, same bloat).
All ideas/comments are greatly appreciated. The more obscure the better.
EDIT:
Since this got flagged as a possible duplicate of ASP.NET Core 0x80004005 I need to specify why that is not a duplicate.
That referenced project is an older version of ASP.NET Core (last use
of project.json was in 2016)
That referenced project targets .NET Core and not .NET 4.6.1. It is mentioned here as well that targeting .NET Core works on IIS in regard to this issue.
Selected answer points out that they fixed it by:
Turns out that this was result of needing to install some windows
updates and this problem:
api-ms-win-crt-runtime-l1-1-0.dll is missing when opening Microsoft
Office file
Rather than install the version discussed in the above issue I whet
into Programs and Features and ran a repair on Microsoft Visual C++
2015 Redistributable.
but the installation of Microsoft Visual C++ 2015 Redistributable is one of the steps in the official setup guide and it is mentioned here as well that the official guide has been followed during the setup process.
We have gone over that post and tried to repair and reinstall the Microsoft Visual C++ 2015 Redistributable runtime components and this did not fix the issue.
If anyone stumbles upon this post in the future:
The problem was indeed in the server's antivirus. It wasn't directly blocking the app's executable but its call to a class library in the system folder. This termination did not raise any of the usual alarms.
The application "C:\inetpub\apps\AppFolder\App.exe" attempted to load the library "bcrypt.dll" by calling the function "LoadLibraryExW". The operation was blocked and the application terminated.
After switching the MVC blank app to a completely blank Hello-World app it ran successfully.
I'm using InstallShield 2011 to create a install package.
When I install package in windows server 2012, DefaultAppPool is not overwrite and name of website display incorrect.
Example:
- In IntsallShield: I config name Website is "Shopping" but when I install complete IIS is display name "Website2"
I would recommend using Wix (free and open source) if you need detailed control of the installation of IIS applications.
It has a learning curve. Please see this answer for some quick start tips.
Some further links:
Good resources for learning how to create MSI installers from WiX
http://wixtoolset.org/documentation/manual/v3/main/wix_learning.html
Wix generate single component id for entire tree
Warning in Wix Setup
Creating MSI in VS 2012
MSI vs nuget packages: which are is better for continuous delivery?
After migrating TeamCity from one server to another, and also switching to Visual Studio 2013, our build fails when using MSDeploy to push a TC-built .zip package to IIS.
The application pool that you are trying to use has the
'managedRuntimeVersion' property set to 'v4.0'. This application
requires 'v4.5'
This is a strange error since my IIS server has .NET 4.5 installed and has been happily running and being deployed to for weeks, and a 4.0 application pool will run a 4.5 targeted app.
Unfortunately, the waters are muddied by the changes to TC and VS (2013) so what caused the issue I cannot be sure of.
Note: Our TC server only has Visual Studio 2012 on it, since I'm on MSDN and got early access to 2013. This could be the culprit, but doesn't make the issue any less odd.
I'd prefer not to disabled .NET runtime version checking at all (with IgnoreDeployManagedRuntimeVersion), but instead implicit set runtime version via DeployManagedRuntimeVersion:
<DeployManagedRuntimeVersion>v4.0</DeployManagedRuntimeVersion>
Some more details: http://techblog.dorogin.com/2013/11/deploying-45-projects-with-webdeploy.html
Open your .csproj file and set the following element:
<IgnoreDeployManagedRuntimeVersion>True</IgnoreDeployManagedRuntimeVersion>
Adding it just above this element helps readability:
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
Kudos to https://stackoverflow.com/users/1769923/abhishikt-n-jain for answering with this little-known config setting here:
MSBuild deploy failing after upgrade to .NET 4.5
If anyone knows why this happens, please feel free to add an answer.
Update
Disregard my comments below. While it got me past the deploy, I got a 503 Service Unavailable when I actually tried to run the web app. I backed out this change by setting the managedRuntimeVersion property back to v4.0 and added the IgnoreDeployManagedRuntimeVersion to my project. Then the deploy succeeded and the app worked. Dumb...
This happened to me after I installed .NET Framework 4.5.1 on a Windows Server 2008 R2 SP1 machine (as part of upgrading Powershell).
The IIS user interface on Windows Server 2008 doesn't give the option of setting the managedRuntimeVersion property to v4.5 even after that version is installed. However, this can be done on the command line using the appcmd utility as #3boysdad's answer shows.
appcmd is the command-line equivalent of managing IIS sites, apps, apppools, etc. It is located at %systemroot%\system32\inetsrv\appcmd.exe but it is not on the PATH as the following link explains:
http://www.iis.net/learn/get-started/getting-started-with-iis/getting-started-with-appcmdexe#HowToUse
I'm of the opinion that modifying your project (via the IgnoreDeployManagedRuntimeVersion or DeployManagedRuntimeVersion properties) is sub-optimal. The application pool should be set to use v4.5, and the only way to do that on Windows Server 2008 is to use the appcmd utility. #3boysdad's answer should be the accepted answer.
found this gem while hunting around for this same problem.
appcmd set apppool /apppool.name: <your app pool> /managedRuntimeVersion:v4.5
this will need to be executed in your \System32\inetsrv directory.
I had a working IIS 7.5 with Web Deploy 3.5 configuration such that the "Import/Export Application" feature in the right hand action pane showed up and functioned properly. Unfortunately I had to remove and reinstall IIS, and now the Import/Export functionality does not show up in the Actions pane, as if Web Deploy was not installed.
I tried to reinstall using the automated installer at http://www.iis.net/downloads/microsoft/web-deploy, but when I run it, the installer seems to think that Web Deploy is already installed and does not offer me any reinstall/uninstall option.
How can I force a reinstall of WebDeploy or force IIS to recognize that Web Deploy is still installed?
Go to http://www.iis.net/downloads/microsoft/web-deploy
Scroll to the bottom of the page to the "Download Web Deploy" header
Click the x86 or x64 link next to your language of choice. Do not click the WebPI link.
Once downloaded, click on the installer to open it.
Click Next
Click the Remove button
Now you can reinstall it using the Web Platform Installer, or just use the standalone.
On a side note...
If you don't see the Deploy options in IIS once you've reinstalled Web Deploy, try running IIS as Administrator. Hope this helps.
I am running IIS on my development machine on Windows 7. Web Deploy 3.6 seem to break something as the Import / Export Application options are not available. Had to uninstall 3.6 via control panel add/remove programs and then install 3.5 via Web PI.
I've installed Web Deployment Tool 2.1 then restart IIS Manager and the Import/Export Application appeared.
I was running a 'gallery template' Windows Server 2012 VM on Azure. Web Platform Installer said Web Deploy 3.5 was already installed. At first I thought this neat feature had been removed/moved.
In Add/Remove Programs, saw that Web Deploy 3.6 Beta was installed. Removed it and reinstalled 3.5 (without SQL stuff) via Web PI.
Ran IIS Manager as admin and all works fine.
Update - A new Azure VM also had this problem, but had 3.6 Beta3 installed. Again, removed and reinstalled 3.5 via WebPI.
None of the other answers here fixed this for me with Visual Studio 17 on Windows 10. The fix was here: https://developercommunity.visualstudio.com/content/problem/230372/web-deply-40-msi-location.html
Web Deploy 4 has moved to be distributed with Visual Studio 2017. This is nuts because the Web Deploy service and the Import/Export tools are for server administrators and not devs. The discussion in the link says they are working on adding Web Deploy 4 to the Web Platform Installer, but have encountered a few issues (read: we didn't create a proper deployment for it the first place.)
The fix for me was to uninstall Web Deploy 4 from Control Panel-Apps & features, then reinstall from the MSI provided with Studio. Look in C:\ProgramData\Microsoft\VisualStudio\Packages for a folder like Microsoft.VisualStudio.WebDeploy.Msi,version=...,chip=x64. The MSI file is within that. More detail in the link I mentioned.
My guess is if the IIS Manager is not turned on at the time Studio (and therefore Web Deploy) is installed, the hook for Import/Export can't be created.
My situation is slightly different as I never had the import/export menus. For what it's worth:
I tried to install the Web Deploy installer. It said that a newer version was installed. I tried repairing Web Platform Installer. Nothing changed. I tried changing but was told there were individual components. I tried uninstall/reinstalling WebPlatformInstaller.
After that, the IIS Manager showed a Web Platform Installer icon under the Management section after restarting, but still no Deploy menu on the right click.
Double-clicking that icon started the installer where I could then search for web deploy. There was a Web Deployment Tool 2.1 that was not installed. Clicking Add then Install and restarting IIS Manager (not run As Administrator) was all that was needed to get the Deploy menu:
According to this Microsoft document, the Web Platform Installer should have started automatically. Never did. But it is in the start menu. The steps are the same weather you start it from IIS Manager or standalone.
I downloaded Visual Studio 2012 yesterday when it was released on MSDN. I have noticed that a few of the project types that we had in 2010 are gone or different. The biggest difference for me right now is the removal of the Windows Installer project. Now we are being forced to use the InstallShield LE (Limited Edition). The problem here is that I write a ton of Windows Services and I can't see how to setup InstallShield LE. It appears that we (my company) will have to invest in licenses for the professional edition.
Has anyone found a way to install services in InstallShield LE? When using the Windows Installer project, you just set the custom actions.
For Visual Studio 2012 & InstallShield LE, do the following:
Run through the InstallShield project assistant and add the primary output of your service to the Application files section.
After you are done with the project assistant, double click the "Files" item under step two of the setup project.
Right click on the primary output of your service, and go to properties.
Click the "COM and .NET Settings" tab, and place a check in the "Installer Class" checkbox.
Click Ok
Now, once you build and run your install, your service will show up in the Windows Services snap in.
Note that this assumes you added a "Project Installer" to your service project (Right click on the service design sheet and click "add installer"). I can confirm this work on Windows 8 with Visual Studio 2012 / InstallShield LE.
I've recently installed VS 2012 with Install Shield LE. At first I kept getting a ISEXP -5036 internal server error after a build (this was after setting up a ISLE project and running through the Install Shield Project Assistant). Eventually I found out that it was trying to create the MSI in the DVD-5 media type which is where it was failing. For some reason, creating the solution again from scratch somehow recognizes to only build to the CD_ROM and SingleImage media types which works.
Anyway to rectify the 5036 error, click the Build tab in VS 2012 (top menu), select configuration manager and you should see that your IS setup file is selected on the DVD-5 configuration. Change this to CD_ROM and click close. Once you build/rebuild it will complete with no IS 5036 error.
While using the installer class checkbox may work for some instances, you may experience the following error:
Error 1001.The specified service already exists
Here is an excerpt from this link on how to resolve this issue:
For Error: Error 1001.The specified service already exists
This error will occur if the component installing a .NET Service is
incorrectly configured with ".NET Installer Class" set to Yes. The
method to install a .NET Service is to use Component\Advanced
Settings\Services view, not the ".NET Installer Class" setting.
Making definitions in the Component\Advanced Settings\Services view
creates entries in the Windows Installer ServiceControl and
ServiceInstall Tables. These entries are used by the Windows
Installer "InstallServices" action to install the Service.
If your project is .NET, then try then you can use the ServiceProcessInstaller class with InstallShield LE.
To get it to work with InstallShield, you have to go into the InstallShield "files" tree and right click on your file. Then check the checkbox for "Installer class" on the "COM and .NET settings" tab.
I have gotten it to work, but I've had problems on some OS's like Windows 2008R2. Your mileage may vary.
Here is an example: http://www.codeproject.com/Articles/14353/Creating-a-Basic-Windows-Service-in-C
I had all sorts of problems with this.
As follows.
InstallShield takes ages to download
the registration process is a pain.
the configuration options are confusing and overly complex.
the accepted solution on this thread is a hack and it doesn't always work - see 1001 in the documentation - essentially you need to get through the paywall to get the right configuration options to install a windows service.
Solution for me as mentioned elsewhere - was to abandon InstallShield
Very easy from that point.
Edit: Update - install the latest version from here https://wix.codeplex.com/releases/view/115492 for vs 2013 / 2015
Visual Studio setup projects are back in VS 2013 as a visual studio extension.
https://visualstudiogallery.msdn.microsoft.com/9abe329c-9bba-44a1-be59-0fbf6151054d
Please update your solution and projects to VS 2013. If you are still in VS 2010, you are probably better off by upgrading directly to VS 2013.
My experience with Installsheild LE is that it is very quirky but once you figure out the tricks, it is easier to use. However, I think that the limited edition is a way by Microsoft and Flexera to sell the fully featured edition. In other words, first we pay Microsoft a lot of money for Visual Studio and then their partner (in crime) more for Installsheild. Bad strategy which did not work out since they had to bring back the setup projects in VS 2013.
I've written about this subject:
Augmenting InstallShield using Windows Installer XML - Windows Services
Basically you create a merge module using WiX to encapsulate the service and then add it to your installshield project. ( Be sure to associate to the INSTALLDIR directory to make sure your file goes where you expect ). Build and test on a VM. Piece of cake.
I'm using VS2012 and Installshield LE Spring Edition. I did not have to use Wix.
If you encounter the error "Could not create _isconfig.xml for use with InstallUtilLib.dll", please create a folder with the same name as your setup project and inside the setup project folder.
Credits to http://community.flexerasoftware.com/showthread.php?165929-Could-not-create-_isconfig-xml-for-use-with-InstallUtilLib-dll
I just got some problems finding where to add installer as referred in the answer. So here it is how.
Double click on your service class within your Windows service Project
A blank screen with the text "To add components to your class, drag them from the Toolbox and use the Properties window to set their properties..."
Right click anywhere but on the links and select "Add Installer"
see ya
Bear in mind that all the above explanation will not help you if you plan to create later an upgrade of that setup. InstallShiled LE can't stop the running service when you upgrade. You can't do it either from Window Service Installer -> BeforeInstall event.
Wanted to put this here;
On VS 2015, when doing this, I ran into the 1001 error upon installation repeatedly.
Answer on this page explained that on the newer versions (anything past 2012), apparently you need to explicitly leave the installer class option unchecked, and then add your windows service under the Services section under Step 3 of the installer project:
Error 1001 when installing custom Windows Service