Clarion 10/11 program running on Windows Server Core

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?

1 Like

Hi Rick - I wonder if dependency walker would run on that OS, to help test your hypothesis/conclusion.

Very interesting comment. That’s exactly what Bob Z. just emailed me to try. :slight_smile:
With the idea of seeing what specific roles might be enabled on the server to get the needed files.

cool. :slight_smile:

This page mentions another app called “dependencies.exe” that’s console based. If depends doesn’t work, maybe try this? https://stackoverflow.com/questions/49196859/how-to-output-dependency-walker-to-the-console

2 Likes

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.

4 Likes

Apologies for reactivating this post, and I do not know if I will express myself correctly.

But, how much does it represent a security tread to insert DLL, which was initially not meant to be there? Does anybody have any experience with this?

For example, Radio buttons are all blurry on Windows core.

image

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.

Thank you for your answer.

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.

image

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>
    <dependentAssembly>
      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
1 Like

@CarlBarnes, thank you for a suggestion, but that did not help.

OLE is definitely a desktop function and the MS info on server core differences What is Server Core? | Microsoft Docs and DLLs Included with Server Core (Windows) | Microsoft Docs suggests the desktop experience would be a security risk.

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.