Windows Server Core is windows server running with the “Desktop Experience”. This means there is no desktop, no file exporter, etc. Basically, you manipulate the server from a command prompt and powershell.
You can run a program with a UI like notepad and it works fine, so it doesn’t really mean no GUI. It means no built-in Windows GUI.
I wanted to run a nettalk server as a service on this type of Windows Server installation.
I found the program never launches, either from the command line as a non-service or running as a service.
I did some experimenting and this is what I found.
I have an old utility written in Clarion 5.5. This utility runs OK.
I wrote the following little program.
PROGRAM
MAP
MODULE('Winapi')
OutputDebugString(*CSTRING),PASCAL,RAW,NAME('OutputDebugStringA')
END
TestWindow procedure()
END
TestString cstring('Hello world')
CODE
OutputDebugString(TestString)
TestWindow()
TestWindow procedure()
MyWin WINDOW,AT(,,225,118)
STRING('Hello word'),AT(43,39),USE(?STRING1)
END
code
open(MyWin)
accept
end
close(MyWin)
This program works when compiled in LIB mode but fails when compiled in DLL mode. This is true even if I drop the TestWindow procedure so there is no window in the program at all. In that case I see the “hello world” message in debug view only when the program is compiled in LIB mode.
My conclusion at this point is there is some dependency in the Clarion runtime that does not exist in the Server Core installation.
Has anyone been able to get their Clarion 10/11 program to run under Server Core?
Very interesting comment. That’s exactly what Bob Z. just emailed me to try.
With the idea of seeing what specific roles might be enabled on the server to get the needed files.
Turns out oledlg.dll is the system DLL that is missing in the Server Core installation that the Clarion programs needs. Copying this file from \Windows\SYSWOW64 from a full installer of Windows Server to the same folder on the Server Core machine allows the Clarion program to run when compiled in DLL mode.
I don’t know the ramifications of doing this in a production environment or what happens with Windows Updates, so proceed with this knowledge at your own risk.
I don’t know the security or even licensing ramifications of copying the DLL to Windows Core.
I never implemented this solution in a production environment.
Regarding the radio buttons; make sure the oledlg.dll you copy is from the same version of Windows Standard/Datacenter as you are running in Core.
You might want to experiment with your application’s manifest settings to see what impact that has on drawing the control.
I do not think there is a licensing issue. Because even on the Microsoft Technet forum, you can find a suggestion to copy missing DLL. Also, other companies are suggesting the same for their products.
I am more concerned about a possible security issue. We want to run NetTalk Server as API Server, and the AWS nano EC2 option would be perfect.
There is no need for GUI on a server, and the Core version of Windows has a smaller memory footprint. We are considering using that version.
But again, there is a security concern for introducing system DLL, which was not supposed to be there.
Radio buttons are functional. DLL is from the same Windows Server version.
You probably have a Manifest with Themed controls turned on?
Those Visual Styles come from the ComCtrl32.DLL in the special version 6 DLL loaded from the WinSxS folder. I would guess the Server Core does not come with those UI related DLLs. Test by turning off Themed Controls and build and run.
If you want to be able to run it both ways you’ll need to have an external MyApp.exe.Manifest file. On Server Core you need to NOT have the Microsoft.Windows.Common-Controls 6.0 dependency, this section:
Dependency Walker (Depends.exe) should hilight all the api dll’s a clarion app needs, but if you dont need that functionality on server core, isnt the compiler excluding the api calls?
If you do need that functionality, could you do a work around like using check boxes (if that doesnt need the OLE dll) or command line switch or configuration txt file? Alot of headless linux apps just use a config file of sorts and I get the impression MS are trying to make server core a headless gui/desktop less experience, but I’ve not messed around with it to really be able to comment on the subject other than the info that can be read online.