2012-07-06 14 views
65

La forma más fácil de abrir un archivo con la aplicación por defecto es:C# archivos abiertos con la aplicación por defecto y parámetros

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

Sin embargo, me gustaría saber si existe una manera de establecer parámetros a la aplicación por defecto , porque me gustaría abrir un pdf en un número de página determinado.

Sé cómo puedo hacerlo creando un nuevo proceso y estableciendo 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 el ruta de acceso de las aplicaciones cada vez que uso la aplicación en otra computadora. Mi idea es que espero que la computadora haya instalado el lector de PDF y solo decir qué página abrir.

Gracias.

+0

¿Quiere decir enviar parámetros al ejecutable de Adobe en lugar del archivo pdf, pero sin utilizar la ruta completa? –

+2

¿Cómo espera que esto funcione? 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 usar. – ken2k

+1

No es suficiente decir 'myProcess.StartInfo.FileName =" Acrobat.exe ";' sin dar la ruta completa a la aplicación? – daniloquio

Respuesta

34

EDITAR (gracias a surfbutler comentario en la pregunta comentarios) Si desea que se abra el archivo con la aplicación predeterminada, es decir, sin especificar Acrobat o Reader, no puede abrir el archivo en la especificación página ified.

Por otro lado, si estás bien con la especificación de Acrobat o Reader, sigue leyendo:


Usted puede hacerlo sin contar 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 para abrirlo con el lector, pero con Acrobat, chage la segunda línea como la siguiente:

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

SEGUNDA EDICIÓN: Encontrar la aplicación por defecto para la extensión pdf

Puede consultar el registro para identificar la aplicación por defecto para abrir archivos PDF y luego definir nombre del archivo en StartInfo de su proceso en consecuencia.Again, thanks surfbutler for your comment :)

Siga esta pregunta para detalles sobre como hacer que: Finding the default application for opening a particular file type on Windows

+2

+1 También creo que es posible buscar la aplicación asociada a cualquier tipo de archivo, p. '.pdf' en el registro, luego ponga ese nombre en el parámetro de nombre de archivo. Consulte http://stackoverflow.com/questions/162331/finding-the-default-application-for-opening-a-particular-type-on-windows?rq=1 – Surfbutler

+0

¿Hay algún parámetro abierto para obtener Adobe Reader? para abrir en la vista de 2 páginas? Solo curiosidad, si alguien sabe, sería muy útil. He estado mirando alrededor, pero no puedo encontrar nada. –

3

se puede tratar con

Process process = new Process(); 
process.StartInfo.FileName = "yourProgram.exe"; 
process.StartInfo.Arguments = ..... //your parameters 
process.Start(); 
-4

favor añadir Configuración en Propiedades para el proyecto y hacer uso de ellos de esta manera usted tiene la configuración limpia y fácil configurables que se puede configurar como predeterminado

How To: Create a New Setting at Design Time

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

  1. derecha + Pulse en Proyecto
  2. Agregar nuevo elemento
  3. En Visual C# Artículos -> General
  4. Seleccione Configuración del archivo
+9

¿Pestaña incorrecta tal vez? ;) – ken2k

7

que convierte el código VB en el blog unidos por xsl a C# y modificar 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 - este no es confiable Ver Finding the default application for opening a particular file type on Windows.

Cuestiones relacionadas