c # abrir archivo con la aplicación y los parámetros predeterminados

103

La forma más fácil de abrir un archivo con la aplicación predeterminada es:

System.Diagnostics.Process.Start(@"c:\myPDF.pdf");

Sin embargo, me gustaría saber si existe una forma de configurar los parámetros de la aplicación predeterminada, porque me gustaría abrir un pdf en un número de página determinado.

Sé cómo hacerlo creando un nuevo proceso y configurando los parámetros, pero de esta manera necesito indicar la ruta de la aplicación, y me gustaría tener una aplicación portátil y no tener que configurar la ruta de la aplicación cada vez. Utilizo la aplicación en otra computadora. Mi idea es que espero que la computadora tenga instalado el lector de pdf y solo diga qué página abrir.

Gracias.

Álvaro García
fuente
¿Quiere decir enviar parámetros al ejecutable de Adobe en lugar del archivo pdf, pero sin utilizar la ruta completa?
Bali C
2
¿Cómo espera que funcione esto? Si no conoce la ruta de la aplicación, no sabe cuál es el visor de PDF predeterminado y no sabe qué formato de parámetro utilizar.
ken2k
2
¿No es suficiente decir myProcess.StartInfo.FileName = "Acrobat.exe";sin dar la ruta completa a la aplicación?
daniloquio
1
Eche un vistazo a esta pregunta SO para ver si ayuda
Mark Hall
2
@daniloquio: Creo que el punto es que el OP no sabe qué ha instalado el usuario final en su máquina para leer archivos de adobe, podría ser Acrobat, Acrobat Reader o algo más.
Surfbutler

Respuestas:

43

Si desea que el archivo se abra con la aplicación predeterminada, es decir, sin especificar Acrobat o Reader, no puede abrir el archivo en la página especificada.

Por otro lado, si está de acuerdo con especificar Acrobat o Reader, siga leyendo:


Puede hacerlo sin indicar la ruta completa de Acrobat, así:

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();

Si no desea que el pdf se abra con Reader pero con Acrobat, cambie la segunda línea de esta manera:

myProcess.StartInfo.FileName = "Acrobat.exe";

Puede consultar el registro para identificar la aplicación predeterminada para abrir archivos pdf y luego definir FileName en la StartInfo de su proceso en consecuencia.

Siga esta pregunta para obtener detalles sobre cómo hacerlo: Encontrar la aplicación predeterminada para abrir un tipo de archivo en particular en Windows

daniloquio
fuente
2
+1 También creo que es posible buscar la aplicación asociada con cualquier tipo de archivo, por ejemplo, '.pdf' en el registro, luego poner ese nombre en el parámetro de nombre de archivo. Ver stackoverflow.com/questions/162331/…
Surfbutler
¿Hay algún parámetro abierto para que Adobe Reader se abra en la vista de 2 páginas? Solo por curiosidad, si alguien lo sabe, sería realmente útil. He estado buscando, pero no encuentro nada.
taki Martillo
18

esto debería estar cerca!

public static void OpenWithDefaultProgram(string path)
{
    Process fileopener = new Process();
    fileopener.StartInfo.FileName = "explorer";
    fileopener.StartInfo.Arguments = "\"" + path + "\"";
    fileopener.Start();
}
Jessie lesbianas
fuente
1
Eso es perfecto !
Francois Girard
1
Esto funcionó para mí para abrir archivos PDF con el programa predeterminado. ¡Gracias!
Smitty-Werben-Jager-Manjenson
1
@imgen, la pregunta es sobre proporcionar el número de página como parámetro. ¿Esta respuesta cubre eso?
daniloquio
1
@daniloquio lo siento, no leí lo suficientemente profundo de la pregunta.
imgen
2
No olvide envolverlo en un bloque de uso, el proceso es IDisposable.
René Carannante
7

Convertí el código VB en la publicación del blog vinculada por xsl a C # y lo modifiqué un poco:

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();
    }
}

EDITAR: esto no es confiable. Consulte Encontrar la aplicación predeterminada para abrir un tipo de archivo en particular en Windows .

Ohad Schneider
fuente
3

puedes probar con

Process process = new Process();
process.StartInfo.FileName = "yourProgram.exe";
process.StartInfo.Arguments = ..... //your parameters
process.Start();
Aghilas Yakoub
fuente
-5

Agregue Configuraciones en Propiedades para el Proyecto y utilícelas de esta manera tendrá configuraciones limpias y fáciles de configurar que se pueden configurar como predeterminadas

Cómo: crear una nueva configuración en tiempo de diseño

Actualización: después de los comentarios a continuación

  1. Derecho + clic en el proyecto
  2. Agregar ítem nuevo
  3. En Elementos de Visual C # -> General
  4. Seleccionar archivo de configuración
HatSoft
fuente
14
¿Tal vez la pestaña incorrecta? ;)
ken2k