====== Windows ======

Answers to Frequently Asked Questions regarding Synchronet and Microsoft Windows operating systems.

  * [[#sbbsexec.dll|Why don't DOS programs run on my Windows Vista, Windows 7 or Windows 8 system]]?
  * [[#win64|Why don't DOS programs run on my 64-bit Windows system]]? 
  * [[#external_popup|How do I keep external programs from popping up windows and
stealing the keyboard/mouse focus]]?
  * [[#socket_io|Why do external programs that use socket I/O not work on my BBS]]?
  * [[#dial-up|How do I setup my BBS to support dial-up modems/users]]?
  * [[#ansi.sys|Why is the console output of some DOS programs not sent to the remote terminal]]?
  * [[#ipv6|Why do I get !ERROR 11001 calling getaddrinfo() on :: on Windows XP]]?

===== SBBSEXEC.DLL =====
:?: **Question:**\\
Why don't DOS programs (e.g. editors, door games) run on my //Windows Vista//, //Windows 7//, //Windows 8// or //Windows 10// 32-bit (x86) operating system?

:!: **Answer:**\\
There are 2 new requirements for 16-bit DOS programs to work under Synchronet-Win32 on //Windows Vista+// 32-bit (x86) operating systems:
  - You must have ''SBBSEXEC.DLL'' rev 38 or later (this is included in SBBS v3.14a).
  - You must have a copy of ''SBBSEXEC.DLL'' (from your Synchronet ''[[dir:exec]]'' directory) in your Windows ''System32'' folder.

Beginning with Windows 8, Microsoft disables support for 16-bit (DOS) programs by default. On Windows 8, Search for "16-bit Application Support" in the Windows Control Panel and enable that setting.

In Windows 10 (32-bit), this setting is found under "Turn Windows features on or off", "Legacy Components", "NTVDM".

{{:faq:windows_ntvdm_setting.png?500|}}

On Windows 10 (32-bit), you also need to right-click on the title bar of a ''cmd.exe'' window, select Properties and then enable "Use legacy console":

{{:faq:windows_10_legacy_console.png?500|}}

If you do not enable this setting, you may get 16-bit MS-DOS Subsystem error popup messages when attempting to run 16-bit DOS programs from a command prompt:

{{:faq:dos_subsystem_ntvdm_error.png?500|}}

These settings only exists in 32-bit versions of Windows 8 and Windows 10.

Stock 64-bit (x64, amd64) editions of Windows (without [[http://www.columbia.edu/~em36/ntvdmx64.html|NTVDMx64]] installed) cannot run 16-bit DOS programs from Synchronet. See the next FAQ item for the details.

===== Win64 =====
:?: **Question:**\\
Why won't DOS programs run on my 64-bit computer running a 64-bit version of Windows?

{{:faq:16bit_app_x64_error.png|No NTVDM support in 64-bit editions of Windows}}

:!: **Answer:**\\
Microsoft does not include Virtual DOS Machine (NTVDM) support in their
64-bit operating systems, by default. Synchronet for Windows relies on NTVDM for
16-bit DOS program support, so you need to either run a 32-bit Windows version
(e.g. re-install, use dual-boot, or run in a Virtual Machine) or install [[howto:NTVDMx64]] to gain 16-bit DOS program support in your 64-bit Windows install. Yes, you can run 32-bit Windows versions of Synchronet on a 64-bit (x64) system.

As of March 12, 2014, you can disable DOS program support in a single instance of Synchronet with the ''NO_DOS'' option in the ''Options'' value of the ''[BBS]'' section of your ''[[config:sbbs.ini]]'' file. Or uncheck the "DOS Program Support" checkbox in the "Terminal Server Configuration" dialog of the [[monitor:sbbsctrl|Synchronet Control panel]]:

{{:faq:term_server_cfg.png|New option to disable DOS Program Support in the Terminal Server Configuration dialog of the Synchronet Control Panel}} 

**Note**: The Synchronet [[server:Terminal]] Server assumes external programs are 16-bit DOS programs by default. In order to indicate that a program is a native (e.g. 32-bit) program, you must either set the corresponding [[util:SCFG]] ''Native Executable'' option to ''Yes'' (for each instance the program is used in a command-line in [[util:SCFG]]) or add the program name (as used in the command-line) to the [[util:SCFG]]->External Programs->Native Program List:

  ╔════════════════════════════╗
  ║     Native Program List    ║
  ╠════════════════════════════╣
  ║ │cmd.exe                   ║
  ║ │sh                        ║
  ║ │csh                       ║
  ║ │bash                      ║
  ║ │node                      ║
  ║ │smbutil                   ║
  ║ │zip                       ║
  ║ │unzip                     ║
  ║ │pkzip25                   ║
  ║ │mp3info                   ║
  ║ │                          ║
  ╚════════════════════════════╝

===== External Popup =====
:?: **Question:**\\
How do I keep external programs (doors) from popping up windows and
stealing the keyboard/mouse focus?

:!: **Answer:**\\
Check [[:monitor:SBBSCTRL]]:Telnet->Configure->Minimize Externals or add ''XTRN_MINIMIZED'' to the ''Options'' key of the ''[BBS]'' section of your ''[[config:sbbs.ini]]'' file.


===== Socket I/O =====
:?: **Question:**\\
Why do external programs that use socket I/O (e.g. Synchronet Blackjack, Synchronet BBS List, DoorMUD, [[util:SEXYZ]]) not work on my BBS? 

:!: **Answer:**\\
Some "security" software (e.g. firewall and anti-virus programs) will interfere with the inheritance of socket descriptors between processes. One such program is the //ZoneAlarm Security Suite//. Another is //NOD32//. I don't know if this is an intentional security "feature" or a design flaw. If you have this (or similar) software installed, it may need to be disabled or completely un-installed for socket inheritance to work again.  

Another potential cause of this Windows problem is malware (viruses, trojans, etc.) which disable the Windows Firewall Service. Even if/when the malware is successfully removed, the damage done to Windows (and specifically the registry) remains. One recent sighting of this problem was rectified with the following steps (found [[http://web.archive.org/web/20210417115942/http://answers.microsoft.com/en-us/windows/forum/windows_7-security/cannot-start-windows-firewall-service-error/e5c277c7-df4d-4253-91ec-5b3314488dae|here]]):

  - In Registry Editor, browse to the key ''HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SharedAccess''
  - Right-click //SharedAccess//, and select //Permissions...//
  - Click //Add//.
  - In the “Enter the object names to select” field, type “NT SERVICE\mpssvc”. Then click //Check Names//. The name should change to ''MpsSvc''.
  - Click //OK//.
  - Check //Full Control// checkbox in the //Allow// column.
  - Click //OK//.

===== Dial-up =====
:?: **Question:**\\
How do I setup my BBS to support dial-up modems/users?

:!: **Answer:**\\
Use the [[util:SEXPOTS]] utility in combination with Synchronet for Windows.

===== ANSI.SYS =====
:?: **Question:**\\
Why is the console output of some 16-bit DOS programs not intercepted/redirected and sent to the remote user's terminal?

:!: **Answer:**\\
Check that your ''C:\WINDOWS\SYSTEM32\CONFIG.NT'' file does NOT include Microsoft's ''ANSI.SYS'' console driver. Use of this ''ANSI.SYS'' driver defeats the interception of console output from some 16-bit console I/O programs.

===== IPv6 =====
:?: **Question:**\\
Why do I get the error message ''!ERROR 11001 calling getaddrinfo() on ::'' when running Synchronet v3.17 on Windows XP?

:!: ** Answer:**\\
Synchronet v3.17 defaults to assuming that your operating system supports IPv6. Windows XP does not support IPv6 by default (only IPv4). You can either install IPv6 services on Windows XP (e.g. using the command-line: ''[[http://web.archive.org/web/20151028183111/https://support.microsoft.com/en-us/kb/2478747|netsh int ipv6 install]]'') or set the ''Interface'' key values in your ''[[config:sbbs.ini]]'' file to exclude the IPv6 //all-interfaces// address: ''::''.

===== See Also =====
  * [[:faq:|FAQ Index]]
