Search code examples
c#pathfilenamesprocessstartinfostart-process

Process.Start filename using %temp%


For some odd reaseon this code fails:

p.StartInfo.FileName = @"%temp%\SSCERuntime_x86-ENU.msi";

and this code succes:

p.StartInfo.FileName = @"C:\Users\USERNAME\AppData\Local\Temp\SSCERuntime_x86-ENU.msi";

Is there any reason I am missing?

Note I just copied the path, I don't think the rest of the code is needed but I'll put it anyway:

Process p = new Process();
p.StartInfo.FileName = @"%temp%\SSCERuntime_x86-ENU.msi";
p.StartInfo.Arguments = "/passive";
p.Start();

Solution

  • The Process class does not expand strings with environment variables (i.e. %temp%).

    If you want to use environment variables to build the FileName property then you'll have to get the environment variables (using the GetEnvironmentVariable method on the Environment class) and perform the substitution yourself, like so:

    // Construct the path.
    string temp = Environment.GetEnvironmentVariable("temp");
    string path = Path.Combine(temp, "SSCERuntime_x86-ENU.msi");
    
    // Launch the process.
    Process p = new Process();
    p.StartInfo.FileName = path;
    p.StartInfo.Arguments = "/passive";
    p.Start();
    

    Additionally, you can use the ExpandEnvironmentVariables method with your original string like so:

    p.StartInfo.FileName = 
        Environment.ExpandEnvironmentVariables(@"%temp%\SSCERuntime_x86-ENU.msi");