Jump to content

C:\Windows\System32\DisplaySwitch.exe is hidden from AutoIt in Windows 10 1703 (Creators Update)


Recommended Posts

OK, this one is baffling me and my coworkers.

I created an AutoIt script with Windows 10 1607 (or maybe 1511) that would do a RunWait "DisplaySwitch.exe /clone" to have both monitors display the same content.  It worked without issue.  Then I upgraded a couple of weeks ago to Windows 10 1703 (Creators Update).  Now when I run the script, it executes everything before and after the RunWait command but the display properties never change.  I used variables to capture the result of the RunWait command and the value of @error.  RunWait returns 0, @error returns 1 (though I don't know what that means exactly).

I started over with a two-line AutoIt script which attempts to run DisplaySwitch.exe and nothing happens.  I modified the RunWait command to run C:\windows\system32\DisplaySwitch.exe but nothing happens.  So, I created a batch file which just attempts to run C:\windows\system32\DisplaySwitch.exe followed by a pause statement so I could read the results.  It reports "'C:\WINDOWS\System32\DisplaySwitch.exe' is not recognized as an internal or external command, operable program or batch file.". :blink:

So I modified the batch file to perform a directory listing of C:\Windows\system32\*.exe .  It generates a list of 337 files, but if you look through the list, DisplaySwitch.exe is missing.  I then modified the batch file to perform a recursive search for DisplaySwitch.exe from the root of C:\ and it eventually finds this single file: C:\Windows\WinSxS\amd64_microsoft-windows-displayswitch_31bf3856ad364e35_10.0.15063.0_none_fdd58a325d4a2de2\displayswitch.exe

I can run that file from the batch file and it works fine.  If I run the batch file directly rather than through an AutoIt script, it works fine and it lists DisplaySwitch.exe in C:\Windows\system32 .  

I have compiled the AutoIt script using v3.3.14.2 and in desperation, I even compiled it with autoit-v3.3.15.0-beta-setup.exe with the same results.  I also tried adding #RequireAdmin with the same results.  If I look at the security properties of the file I cannot find anything which implies that a script could not access it.  I also notice that if I open a command prompt and do the same directory listing of all .exe files in C:\windows\system32 it lists 660 files, compared to only 337 files when that command is run through my AutoIt script.  I can also report that when I made these two files available for download through Google Drive to my colleague running Windows 10 1511, Smart Filter and Symantec both complained about the files, but we bypassed the warning and they executed properly (i.e. DisplaySwitch.exe was visible in C:\windows\system32 and it switched to Clone Mode).  My other colleague with 1703 has the same problem as me where DisplaySwitch.exe is invisible to scripts running from within an AutoIt script.

switch.au3

switch.cmd

Link to comment
Share on other sites

  • Developers

That will only work with the Full SciTE4AutoIt3 installer loaded. Key thing is  indeed to compile/run with the x64 version of AutoIt3.

Jos

SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource   Forum etiquette  Forum Rules 
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Link to comment
Share on other sites

29 minutes ago, anthonyjr2 said:

My guess is the DisplaySwitch binary maybe switched to being 64-bit?

Try adding this to the top of your script:

#AutoIt3Wrapper_UseX64=Y

 

That fixed the problem.  The new barebone script works properly.  Unfortunately, the original, more complicated script used a .dll file which no longer works when running with the x64 wrapper directive.  I am going to see if there is a 64-bit version of the commg.dll file and try again.  Thank you!!!

Edit: 2017-07-10 12:41pm EST

Yeah, so, I am probably screwed.  The author only made a 32-bit .dll file.

Quote

Note the following shortcomings:

the dll is 32 bit so it will not work with a 64 bit app.

 

Edited by mlazovjp
Link to comment
Share on other sites

  • 5 months later...
  • Developers
38 minutes ago, nergeia said:

A simple solution is replacing "c:\windows\system32" with "c:\windows\sysnative". 

A simple solution to what?
First post in an 6 months old thread...  why?

Jos

Edited by Jos

SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource   Forum etiquette  Forum Rules 
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...