Service not accessible when "Enable 32-Bit Applications" set to true - web-services

On the development server I use IIS Veresion 7.5.7600.16385
And a Service compiled for .Net 4.5.1, Any CPU
The service works fine on the development server (Win Server 2008 R2).
On the client's production server however I get strange problems:
(Same IIS Version, same OS version)
As soon as I set "Enable 32-Bit Applications" the service's URL is no longer accessible in a browser. (Page not available)
(I need the 32Bit mode because the service uses some legacy COM components)
What may cause this problems?
Any ideas, hints, suggestions?
Edit
More Details:
The "IIS Worker Process" is running as "w3wp.exe *32"
There is a ClickOnce Installation in the same Application Pool which behaves the same: works ok in 64 bit, not accessible if 32Bit set to true.
In fact all pages of this 32Bit App-Pool produce the same behaviour (HTTP 500) page not found.

Step 1: Enable Logging in IIS
In Order to enable better error messages and log files in IIS you must install two Features:
Control Panel->Programs and Features->Turn Windows features on or off
You'll need two features installed:
WebServer->Common Http Features->HTTP Errors
WebServer-> Health an Diagnostics->HTTP Logging
Step 2: Analyse Error Messages
With HTTP Errors enabled I got a more verbose message when I accessed any page in the 32Bit App Pool:
HTTP Error 500.19
DynamicCompressionModule
ErrorCode 0x8007007e
Step 3: Decode Error Code
I used Microsoft Exchange Server Error Code Look-up to convert the ErrorCode into something more useful:
C:\Users\combyte>err 0x8007007e
as an HRESULT: Severity: FAILURE (1), Facility: 0x7, Code 0x7e
...
ERROR_MOD_NOT_FOUND winerror.h
The specified module could not be found.
It turned out, that a specific DLL was not installed. In my case the installation of WSUS (Windows Server Update Services) installed a 64Bit version of DynamicCompressionModule (C:\Windows\system32\inetsrv\suscomp.dll) only.
Solution1
Remove/Disable the XPress compression scheme from the IIS configuration (for all pages/app-pools) using this command:
%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /-[name='xpress']
Solution2
Disable loading of the xpress module in IIS config file C:\Windows\System32\inetsrv\config\ApplicationHost.config for 32Bit App-Pools:
add attribute preCondition="bitness64" to the xpress module in section <modules>:
<add name="DynamicCompressionModule" lockItem="true" preCondition="bitness64" />
Solution3
Install the 32Bit version of suscomp.dll(from a 32 Bit Installation of WSUS) into %windir%\SYSWOW64\inetsrv\

Related

Django app on Windows Server 2012 - HTTP Error 500.0 - The FastCGI process exited unexpectedly

I setup a django "hello world" app IIS (Windows Server 2012). The application is run successfully using the Django web server. However, when I tried to install in on IIS (following the instructions provided here) I get an HTTP 500 error with the message "python.exe - The FastCGI process exited unexpectedly".
I have seen numerous related posts on stackoverflow, but nothing seems to work for me. Based on the guidance
I have checked file permissions on both the app and virtual environment folder but they in my opinion this should not be the issue as the users IUSR and IIS_IUSRS can Read & execute, Read and List folder contents.
I have tried also to run wfastcgi-enable based on the instructions provided by this post but I get the error "ensure your user has sufficient privileges and try again". Please note that I tried running it both from an "elevated" command line and also power shell with no results.
I have reinstalled python to make sure it is installed for "all users" (as suggested by this post) but I get an error "0x80070659 - This installation is forbidden by system policy".
I looked in the Event viewer but I could not find something useful.
My questions:
Is there a specific log that I should check? How could I find it?
My django app does not have a web.config file. Should I create one?
My setup: Windows Server 2012 R2, IIS 8.5, Python 3.9.1

MSI installation succeeds but services are not installed, MsiExec error in event log

I have an msi installer that installs two windows services. There are no errors during installation on a Windows Server 2016 64-bit machine, the installation succeeds but the services are not installed. I was able to install the services manually using installutil but there are no clues as to why the msi failed to install the services. The installer has worked so far in hundreds of installations. I was able to get the event logs from the machine and the only errors I was able to find are in the Application log are of the kind:
Faulting application name: MsiExec.exe, version: 5.0.14393.0, time
stamp: 0x57899002
Faulting module name: MSIC9AE.tmp, version: 4.0.30319.33440, time
stamp: 0x52004298
Exception code: 0xc0000005
Fault offset: 0x000064ff
Faulting process id: 0x2244
Faulting application start time: 0x01d3db09c12691f2
Faulting application path: C:\Windows\syswow64\MsiExec.exe
Faulting module path: C:\Windows\Installer\MSIC9AE.tmp
Report Id: c5ffdc35-5ccd-4b00-9d60-1a198848062e
Faulting package full name:
Faulting package-relative application ID:
Installing again with verbose logging is not an option.
Any help is greatly appreciated.
There isn't much information on how you are installing the services, or what tool you are using to generate the MSI and install those services, but I can make some guesses from that log:
It appears that you are using installer class custom actions to install the services. In every case I'm aware of (except Visual Studio setups) this is unnecessary. Windows Installer has built-in support for installing services without running any code. Custom actions (instead of standard built-in functionality) are error prone. The better tools provide support for the ServiceInstall table and the ServiceControl table and that gets you out of the need to run code and the related issues.
That log shows that you are running a 32-bit msiexec.exe process to install services on a 64-bit system. I believe the 32-bit subsystem is optional on Windows Server, but it's not clear if that's an issue because the install apparently succeeds, although installer class failures typically throw an error and completely roll back the install. Are you installing silently? The other issue could be that there is no 32-bit NET FW to run that (apparently) 32-bit custom action. Or there is a NET FW architecture mismatch (you have some NET 2 code attempting to run in the 4.0 runtime). If that error 0xC0000005 is to be trusted, then you have an access violation inside the custom action code - custom actions work by extracting the code from the MSI Binary table into a random name .tmp file and then calling it from an msiexec.exe process, so perhaps the custom action code has lost access to that \installer folder for some reason. There is also a C++ shim Dll that loads a framework to run the managed code, so there is room for a C++ dependency failure in there as well
The installer class custom action framework is really difficult to debug when it fails because there are plenty of failure points, which is why I pointed out that installer classes can be error-prone as well as unnecessary.
Windows requires different setups for different architectures, so for a 64-bit install it's worth making sure that all the custom action code is explicitly built for 64-bit, if the issue is cross-architecture related.

Appcelerator Titanium build error about log-server-port masks the real error

This is relatively minor, and I wasn't able to find any other record of this issue, but it cost me several stressful hours. I'm considering opening an Appcelerator Jira ticket about this bug, so any feed back is welcome before I do so. Questions: Are there any other workarounds besides what I wrote below? What are some better ways to log the actual error?
Environment
Titanium SDK: 7.0.2.GA
Javascript Engine: V8
Platform & version: iOS 11.2
Device Details: iOS simulator (iPhone 7+)
Host Operating System: OS X 10.13 64 bit
Node Version: 7.10.0
Titanium CLI: 5.0.14
Npm Version: 4.2.0
Description
When building an iOS app and there is an issue connecting to the iOS log-server, it always output "Another process is currently bound to port xxxxx" even if there is another server connection issue such as the port not existing.
Workaround
Figure out the real issue by logging the actual error within the sdk itself (at ~/Library/Application Support/Titanium/mobilesdk/osx/7.0.2.GA/iphone/cli/commands/_build.js in the determineLogServerPort function).
Steps to Reproduce
Create a different type of error with the server. For example, my /etc/hosts file did not have an entry for 127.0.0.1 localhost, so the actual node error was 'ENOTFOUND'.
Create a new titanium app with appc ti new.
Build with appc ti build -p ios
Actual Result
Build errors out with following text:
[ERROR] Another process is currently bound to port 27973
[ERROR] Set a unique <log-server-port> between 1024 and 65535 in the <ios> section of the tiapp.xml
Expected Result
More detailed error. I.E. Something like:
Failed to create/connect to log server port with error "[error given by node net package]".
Followed by suggested solution. For example if the node error was EADDRINUSE, then you could still use the existing error message. But if it's another error, log accordingly so the user has the best information for solving the issue.
Close current emulator running and try again
when emulator was opened by xcode, I got such issue
Please make sure you are executing the app with same App name and ID.
If there is a change, please delete the app from device and retake the build.
I opened the ticket with appcelerator here: https://jira.appcelerator.org/browse/TIMOB-25872
They have just marked it as closed so it will hopefully be included in the next sdk version.
The solution for me was what was mentioned as a solution in the JIRA ticket on appcelerator https://jira.appcelerator.org/browse/TIMOB-25872.
I had recently moved to a new Mac and migrated everything, it created a copy of my host file renaming it but didn't update main one so it had no reference to the localhost in there. Once this was fixed it was building no problem again.
Below is what is in the host file.
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
Hope that helps someone, didn't see the answer on JIRA at first glance.

Whether my own driver needs digital signing in Windows 7 x64

I have created driver to hook ssdt on windows 7 x64. I have one doubt whether I need to digitally sign my driver to install in kernel mode on x64 or else I need just windows drive kit to install it.
Is there any other code or commmands to install a driver in kernel mode other than the Windows Driver Kit(WDK) ?
To install a driver you can use the built-in command-line tool sc.exe. For example:
sc create MyDriver type= kernel binPath= c:\mydriver.sys
ATTENTION: You shouldn't hook SSDT on x64 because of The Patch Guard.
Yes, on 64-bit Windows you must sign your drivers.
For test and development purposes only, you can temporarily enable drivers signed with test certificate that provided in WDK by pressing F8 at boot and selecting “Disable Driver Signature Enforcement“.
However, you will have to do this manually on every boot.
There are few more methods described here, but some of these methods no longer work on Win7 SP1, and what works has so many restrictions and inconveniences, that you are effectively forced to actually sign your drivers with real certificate.
For a development machine, execute bcdedit -set TESTSIGNING ON. You will get watermarks at your desktop for this mode, don't care about them, avoid using ReadyDriver.
Create a test certificate for you, install it at your machine.
Reboot.
Now it's just a matter of test signing your drivers and installing them.
The TESTSIGNING Boot Configuration Option (Windows Drivers)
Signing Drivers during Development and Test (Windows Drivers)
You'll need the tools to test sign your drivers. From what I recall, other options became unreliable as Windows got updated. For me this was the best approach.

CFX_ImageCR3 | Unable to Load Library on Windows Server 2008 R2 64-Bit running ColdFusion 10 64 Bit

We are attempting to migrate our old web server to a new web server. We are trying to install Effalre's CFX_ImageCR3 tag on our Windows Server 2008 R2 64 Bit server running ColdFusion 10 64-Bit.
We've installed the latest setup file from Efflare's website and have registered the CFX C++ Tag in the ColdFusion administrator just as the documentation describes, but when the code that uses the CFX_ImageCR3 tag executes, it says "Unable to load library."
After searching Google, one person recommended we run Dependency Walker to see what DLL's were missing. On the new server, it says the following 'delay-load dependency module was not found'
- GPSVC.DLL
- IESHIMS.DLL
- MF.DLL
- MFPLAT.DLL
- MFREADWRITE.DLL
- WLANAPI.DLL
For comparison, I ran the same program on the old server on which that CFX tag is working. It reported that GPSVC.DLL and IESHIMS.DLL could not load, but the other ones could.
Both of the servers are running the same Operation Systems and the only difference is Cold Fusion 10. Is it possible that I'm just missing some DLLs on the new server? Could it be that it is not compatible with ColdFusion 10 64-Bit? Can you load 32-bit DLL CFX C++ tags on a 64-bit install of CF?
Any help is greatly appreciated.
Thanks
Solution found. It appears that the C++ CFX tax is 32 bit and is compatible with ColdFusion 64-bit version. Effalre currently has a beta installer on their VIP download site, cfx_imagecr_3_service_beta_081030.exe, which is the Java tag.
This was a bit tricky to figure out at first, but once you install the beta make sure you follow these steps:
Install the beta installer to C:\efflare\ (Do not install to C:\Program Files (x86)!)
Start the windows service 'Efflare ImageCR 3 Service'
Open the CF Administrator then goto Java and JVM, in the ColdFusion Class Path add: {applicatino.home}/wwwroot/WEB-INF/lib,C:/Efflare/imagecr3.jar
Restart ColdFusion
NOTE: The class path if for the default ColdFusion 10 install. The first path must point to the directory where you have a cfx.jar file. If you get the error -java.lang.NoClassDefFoundError Exception com/allaire/cfx/CustomTag it is because the class path is not pointing to where the cfx.jar file is located at.