This is my experience in getting OSK started using System.Diagnostics.Process.Start("osk.exe"). I have only tested on Windows 7 64-bit and Windows 10 64-bit and using Visual Studio 2015. The behavior is different on the two Windows versions.
There are three relevant build options:
- Any CPU, Prefer 32-bit checked (default):
On Windows 7 using osk.exe works ok.
On Windows 10 none of osk.exe, \Windows\System32\osk.exe, or \windows\SysWOW64\osk.exe works (probably your situation).
- Any CPU, Prefer 32-bit not checked:
On Windows 7 using osk.exe works ok.
On Windows 10, only \Windows\System32\osk.exe works.
- x64:
On Windows 10, osk.exe and \Windows\System32\osk.exe work.
The platform target (Any CPU) and the checkbox for Prefer 32-bit are in Project Properties, Build tab. The default is to have Prefer 32-bit checked (makes smaller executables). This means the application most likely runs in 32-bit mode on a 64-bit system. In the Task Manager you will see a *32 on Windows 7 and a (32-bit) on Windows 10.
With it unchecked, the application will run in 64-bit mode on a 64-bit system and calling \Windows\System32\osk.exe will find everything it needs. I haven't investigated why the behavior changed in Windows 10, but the bottom line is to use Any CPU with Prefer 32-bit unchecked and specify the full path to OSK, i.e. \Windows\System32\osk.exe.
\Program Files\Common Files\Microsoft Shared\ink\TabTip.exe will start TabTip.