c# open file with default application and parameters
C#FileC# Problem Overview
The most easy way to open a file with the default application is:
System.Diagnostics.Process.Start(@"c:\myPDF.pdf");
However, I would like to know if exists a way to set parameters to the default application, because I would like to open a pdf in a determinate page number.
I know how to do it creating a new process and setting the parameters, but this way I need to indicate the path of the application, and I would like to have a portable application and not to have to set the path of the application each time I use the application in other computer. My idea is that I expect that the computer has installed the pdf reader and only say what to page open.
Thanks.
C# Solutions
Solution 1 - C#
If you want the file to be opened with the default application, I mean without specifying Acrobat or Reader, you can't open the file in the specified page.
On the other hand, if you are Ok with specifying Acrobat or Reader, keep reading:
You can do it without telling the full Acrobat path, like this:
using Process myProcess = new Process();
myProcess.StartInfo.FileName = "acroRd32.exe"; //not the full application path
myProcess.StartInfo.Arguments = "/A \"page=2=OpenActions\" C:\\example.pdf";
myProcess.Start();
If you don't want the pdf to open with Reader but with Acrobat, chage the second line like this:
myProcess.StartInfo.FileName = "Acrobat.exe";
You can query the registry to identify the default application to open pdf files and then define FileName on your process's StartInfo accordingly.
Follow this question for details on doing that: https://stackoverflow.com/questions/162331/finding-the-default-application-for-opening-a-particular-file-type-on-windows
Solution 2 - C#
this should be close!
public static void OpenWithDefaultProgram(string path)
{
using Process fileopener = new Process();
fileopener.StartInfo.FileName = "explorer";
fileopener.StartInfo.Arguments = "\"" + path + "\"";
fileopener.Start();
}
Solution 3 - C#
I converted the VB code in the blog post linked by [xsl][1] to C# and modified it a bit:
public static bool TryGetRegisteredApplication(
string extension, out string registeredApp)
{
string extensionId = GetClassesRootKeyDefaultValue(extension);
if (extensionId == null)
{
registeredApp = null;
return false;
}
string openCommand = GetClassesRootKeyDefaultValue(
Path.Combine(new[] {extensionId, "shell", "open", "command"}));
if (openCommand == null)
{
registeredApp = null;
return false;
}
registeredApp = openCommand
.Replace("%1", string.Empty)
.Replace("\"", string.Empty)
.Trim();
return true;
}
private static string GetClassesRootKeyDefaultValue(string keyPath)
{
using (var key = Registry.ClassesRoot.OpenSubKey(keyPath))
{
if (key == null)
{
return null;
}
var defaultValue = key.GetValue(null);
if (defaultValue == null)
{
return null;
}
return defaultValue.ToString();
}
}
EDIT - this is unreliable. See https://stackoverflow.com/questions/162331/finding-the-default-application-for-opening-a-particular-file-type-on-windows. [1]: https://stackoverflow.com/a/162356/67824
Solution 4 - C#
you can try with
Process process = new Process();
process.StartInfo.FileName = "yourProgram.exe";
process.StartInfo.Arguments = ..... //your parameters
process.Start();
Solution 5 - C#
Please add Settings under Properties for the Project and make use of them this way you have clean and easy configurable settings that can be configured as default
How To: Create a New Setting at Design Time
Update: after comments below
> 1. Right + Click on project > 2. Add New Item > 3. Under Visual C# Items -> General > 4. Select Settings File