problem on 64 bit platform "No such interface supported". RRS feed

  • Question

  • Hi,

    we have developped a service (selected x64 in configuration manager), that calls a child process (also x64)  that calls the following code to start loadstate.exe (a component of USMT 4).


                    int Result = 0;
                    //set SEE_MASK_NOZONECHECKS=1
                    System.Environment.SetEnvironmentVariable("SEE_MASK_NOZONECHECKS", "1");
                    // tried : System.Environment.SetEnvironmentVariable("PROCESSOR_ARCHITECTURE", "AMD64");
                    System.Diagnostics.ProcessStartInfo PSI = new System.Diagnostics.ProcessStartInfo();
                    PSI.FileName = FileName;
                    PSI.Arguments = Arguments;
                    PSI.UseShellExecute = UseShellExecute;
                    PSI.WorkingDirectory = WorkingDirectory;
                    if (!ShowWindows)
                        PSI.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
                    System.Diagnostics.Process Proc = new System.Diagnostics.Process();
                    Proc.StartInfo = PSI;
                    Result = Proc.ExitCode;
                    return Result;


    On a customer site, it throws an exception "No such interface supported".

    We believe that loadstate.exe has returned this error.

    If they open a command and launch the child process manually, the code works and loadstate executes correctly.

    We believe that when the service starts the child process that starts loadstate, the "chain of 64bit" gets broken somewhere and loadstate thinks it's a 32bit apps and does not search the correct path.

    We'll try to go onsite and troubleshoot with procmon but I wonder if you have any idea of what the code might be missing?

    (In our developpment platform, it works correctly and we do not repro the problem, it's maybe because loadstate doesn't try to load the same components do to environnement difference.)



    Emmanuel Dreux
    Formation FIM 2010
    • Edited by ilinfo Saturday, January 21, 2012 11:57 PM
    Saturday, January 21, 2012 11:54 PM

All replies

  • It doesn't matter if the parent of a process is 64-bit or 32-bit:  The child will be what is meant to be (what the developer that compiled it decided it to be).  I guess the notable exception is a .Net executable built for Any CPU, but as far as I know, the decision of JIT compilation is based on the architecture of the PC, not the parent executable.  I could be wrong, though.  Look it up to be sure and if it is relevant to your problem.

    Now, the error message "No such interface supported" sounds like a COM call to QueryInterface() returning E_NOINTERFACE.  The code you show is not related to COM so I am thinking that code has nothing to do with the problem directly.  I am guessing at this point that loadstate.exe is consuming a COM object that exists in 32-bit and 64-bit, and that was upgraded recently.  I am guessing the client's PC has one of these versions outdated.  The outdated version is throwing this error.

    Jose R. MCP
    Sunday, January 22, 2012 1:17 AM
  • Yes,

    I'm confident that it's a COM issue and I asked the customer what he was trying to restore (that would explain that they load different components than us in our environment).

    Now, what doesn't work in this explanation is that it works if the child process is started manually from a command prompt.

    This same child process is returning the error if launched by the service.

    Emmanuel Dreux
    Formation FIM 2010
    Monday, January 23, 2012 9:30 AM
  • It could be that, when manually started, it runs in whatever platform the COM server is properly updated.
    Jose R. MCP
    Monday, January 23, 2012 1:59 PM