0

I'm trying to launch the MultiDigiMon (Multiple digital monitors) utility as part of an automatic calibration scheme.

I can launch it manually by running "multidigimon -touch" (note: that if you don't have any touch devices it wont launch for you, but the file is still in the system32 folder). I can launch the cmd.exe utility just fine.

Here is how I'm trying to do it:

        ProcessStartInfo info = new ProcessStartInfo(@"C:\Windows\System32\MultiDigiMon.exe", "-touch");
        Process.Start(info);

It will just fail with the exception (when you run it):

Unhandled Exception: System.ComponentModel.Win32Exception: The system cannot find the file specified
   at System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
   at System.Diagnostics.Process.Start()
   at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
   at CommandLineTest.Program.Main(String[] args) in C:\Users\-\Program.cs:line 20

Weirdly enough, if you run it via debug or release, it won't throw a runtime exception, it just won't open the utility.

Administrator privileges make no difference. 64-bit Windows 10.

I've tried:

Process.Start in C# The system cannot find the file specified error

Error in Process.Start() -- The system cannot find the file specified

  • 1
    Looking for references to that EXE on the web, I it seems (http://www.fileinspect.com/fileinfo/multidigimon-exe/) that it is a hidden system file. Its "hidden-ness" may be getting in the way. Microsoft probably doesn't want you to run it. – Flydog57 Oct 09 '18 at 16:43
  • That might be true, but I need it to calibrate touch screens. –  Oct 10 '18 at 08:22

2 Answers2

0

Update

So, I did some testing and the reason you're getting the error "can't find the file" is because when running 'un-elevated' it's not able to find the file. I'm unsure still why you aren't able to run it elevated but I was able to run it using the code below. My config is set as "Any-CPU".

ProcessStartInfo info = new ProcessStartInfo(@"C:\Windows\Sysnative\MultiDigiMon.exe", "-touch");
info.WorkingDirectory = @"C:\Windows\Sysnative\";
info.UseShellExecute = true;
Process.Start(info);

Original

Did you try the answer on the first referenced post?

ProcessStartInfo info = new ProcessStartInfo(@"C:\Windows\sysnative\MultiDigiMon.exe", "-touch");
Cory
  • 1,794
  • 12
  • 21
  • Adding the `UseShellExecutive` seemed to make it work, but only on the machine with the touch interfaces (otherwise it wasn't found, but still present). –  Oct 10 '18 at 08:36
  • Interesting. Glad it's working for the ones you need at least. You might play with the targeting the different platforms if you run into issues on some machines. – Cory Oct 10 '18 at 14:49
  • 1
    I changed the configuration, but it made no difference. Thankfully, its part of a tool to be deployed an imaged machine, so all the underlying hardware, OS etc is the same. –  Oct 10 '18 at 15:29
0

In 64-bit Os, If you want to use exe in System32 folder, see this:

PVOID OldValue = NULL;
BOOL bRet = Wow64DisableWow64FsRedirection(&OldValue);
ShellExecute(NULL, _T("open"), _T("C:\\Windows\\System32\\MultiDigiMon.exe"), _T(" -touch"), NULL, SW_SHOWNORMAL);
if (bRet)
{
    Wow64RevertWow64FsRedirection(OldValue);
}
else
{
    LOG_ERROR("Wow64DisableWow64FsRedirection failed!!!");
}
OldValue = NULL;