From: Tor L. <tm...@ik...> - 2010-02-23 20:57:57
|
>> Run the program from cmd.exe and you will see a more helpful message. > I did and the program worked correctly! Oh? Even if it was called "patcher.exe"? I expected you to get a UAC (User Account Control) dialog in that case. ("Do you want to let this program from an unknown publisher make changes to this computer" or something like that.) That is what happens for me, if I have a program called "patcher.exe": When run from MSYS I just get "Bad file number", from cmd.exe the UAC dialog. Possibly some caching is involved, if you have been renaming files back and forth Windows might be confused by now;) What a program *actually* does, what code it contains, is irrelevant for the triggering of the UAC dialog as far as I know, it is just the *name* that matters. Note that if you have a program with some random "safe" name and it tries to do some "administrative" operations to the computer, you won't get this dialog when you run it, but if you run it without administrative privileges such operations won't succeed, of course. I.e. my point was that the name "patcher" makes Windows assume it is a program that needs administrative privileges and thus Windows helpfully asks for permission to provide them to the program; for some reason this doesn't happen when the program is run from the MSYS shell. Anyway, the way around this "useful" feature is to provide a .manifest file for the program that tells Windows that no privilege elevation is necessary (i.e. even if the program name contains "patch" it doesn't actually do anything that would require administrative privileges). The .manifest file should look like this: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <v3:trustInfo xmlns:v3="urn:schemas-microsoft-com:asm.v3"> <v3:security> <v3:requestedPrivileges> <v3:requestedExecutionLevel level="asInvoker" /> </v3:requestedPrivileges> </v3:security> </v3:trustInfo> </assembly> and for patcher.exe, it should be called patcher.exe.manifest . I had to create such files for MSYS's install.exe and patch.exe back when I switched to Windows 7 from XP. (By now presumably MSYS presumably comes with manifests for these exes?) And also for a program called gtk-update-icon-info.exe for instance. --tml |