Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Traks

[Resolvido] System.Diagnostics.Process

Recommended Posts

E ai pessoal. beleza?

 

Estou com alguns problemas com o System.Diagnostics.Process.

Esta aplicação eu utilizei a Plataforma C# do Visual Studio 2008.

 

A minha duvida é o seguinte.

Em uma tela de uma aplicação eu guardo num TextBox(txtDiretorioConta.txt) o diretorio de uma imagem.

Criei um botão para abrir a imagem como o Visualizador de imagens e fax do Windows que consta na txtDiretorioConta.txt via o .

 

Criei o seguinte codigo na ação do clique do botão.

 

             System.Diagnostics.Process proc = new System.Diagnostics.Process();
             proc.EnableRaisingEvents = false;
             proc.Start("C:/windows/system32/rundll32.exe", "C:/WINDOWS/System32/shimgvw.dll,ImageView_Fullscreen " + txtDiretorioConta.Text);
             proc.Start();
             proc.WaitForExit();
 

Dessa forma aparece o seguinte erro:

Member 'System.Diagnostics.Process.Start(string, string)' cannot be accessed with an instance reference; qualify it with a type name instead

Tentei fazer deste modo, mas nada acontece.

            System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.EnableRaisingEvents = false;
            proc.StartInfo.FileName = "C:/WINDOWS/system32/rundll32.exe";
            proc.StartInfo.Arguments = "C:/WINDOWS/system32/shimgvw.dll " + txtDiretorioConta.Text;
            proc.Start();
            proc.WaitForExit();

Alguem poderia me dar alguma luz de como abrir uma imagem com o visualizador de imagens e fax do Windows?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O primeiro código esta totalmente errado, o método Start não recebe nada no construtor.

Terá que ver se o executável que esta chamando aceita algum parâmetro de entrada para abrir determinada imagem.

 

De uma olhada nesses artigos:

http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx

http://msdn.microsoft.com/en-us/library/system.diagnostics.process%28VS.71%29.aspx

http://www.linhadecodigo.com.br/Artigo.aspx?id=271

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa Quintelab.

Obrigado por responder....

 

Que estranho.... antes de postar no forum eu revirei o google.

Muitos exemplos que eu achei era desse jeito que eu postei... alguns diziam que havia dado certo.

 

Eu fiz um outro para abrir arquivos PDF e esse funcionou.

            System.Diagnostics.Process proc = new System.Diagnostics.Process();
            proc.EnableRaisingEvents = false;
            proc.StartInfo.FileName = "AcroRd32.exe";
            proc.StartInfo.Arguments = txtDiretorioConta.Text;
            proc.Start();
            proc.WaitForExit();

Fiz um teste tbem e funcionou

            System.Diagnostics.Process proc = new System.Diagnostics.Process();
             proc.EnableRaisingEvents = false;
              proc.StartInfo.FileName = "firefox.exe";
            proc.StartInfo.Arguments = "http://www.uol.com.br";
             proc.Start();
             proc.WaitForExit();

Ele abriu o firefox com a pagina da UOL.

 

 

O que acontece é que o Visualizador de Imagens e Fax do Windows não é um programa .exe, ele é uma .dll

Então primeiro eu teria que executar o rundll32.exe e depois passar como argumento a dll que desejo carregar. Depois sim carregar a imagem.

 

Tem alguma ideia de como posso resolver isso?

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia.

 

Eu consegui fazer o addReference para o shimgvw.dll

Ele te devolve um objeto PREVIEWLib

Dai eu declarei no using PREVIEWLib.

 

Consegui fazer o seguinte:

 

             PreviewClass preview = new PreviewClass();
              preview.ShowFile("c:/imagem.jpg", 1);

Mas não aconteceu nada. Coloquei um breakpoint e ele simplemente passa sem fazer nada.

Na internet não se encontra muita coisa sobre esse objeto.... só se encontra pessoas assim como eu que estão na luta para conseguir isso rsrsrsrrs

 

o quase mandando esse negocio abrir no paint ou no IE. hahahahha

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sou Brasileiro e ainda estou na luta para conseguir isso huahauhauha

 

O segundo código que eu postei funciona...

 

             System.Diagnostics.Process proc = new System.Diagnostics.Process();
             proc.EnableRaisingEvents = false;
             proc.StartInfo.FileName = "rundll32.exe";
             proc.StartInfo.UseShellExecute = true;
             proc.StartInfo.Arguments = "c:/windows/system32/shimgvw.dll,ImageView_Fullscreen";
             proc.Start();
             proc.WaitForExit();

Com esse código eu consigo abrir o Visualizador de Imagens e Fax do Windows, porem quando eu coloco um caminho, seja ele uma String (c:/imagem.jpg) ou por uma variavel ele não abre nada.

Aparece a porcaria da ampulheta do windows e não faz mais nada.

 

dai eu segui a sua dica.... coloquei esse comando no Prompt de comando com o caminho da imagem.... ele abre normalmente.

 

Outra coisa que eu percebi é que eu tentei fazer a imagem abrir no Office Picture Manager.... e acontece o mesmo problema... fica só processando e não abre nada. O codigo abaixo e para fazer abrir com o Office Picture Manager

            System.Diagnostics.Process proc = new System.Diagnostics.Process();
             proc.EnableRaisingEvents = false;
             proc.StartInfo.FileName = "OIS.exe";
             proc.StartInfo.UseShellExecute = true;
             proc.StartInfo.Arguments = "txtDiretorioConta.Text";
             proc.Start();
             proc.WaitForExit();

 

 

Bom espero que isso ainda tenha um final feliz hahahaha

 

Valew Quintelab.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei sim cara....

 

Desse modo, abre somente o Visualizador de Imagens e Faz do Windows. (Até ai beleza.)

                    System.Diagnostics.Process proc = new System.Diagnostics.Process();
                    proc.EnableRaisingEvents = false;
                    proc.StartInfo.FileName = "rundll32.exe";
                    proc.StartInfo.Arguments = "c:/windows/system32/shimgvw.dll,ImageView_Fullscreen";
                    proc.Start();
                    proc.WaitForExit();

Quando faço isso:

                    System.Diagnostics.Process proc = new System.Diagnostics.Process();
                    proc.EnableRaisingEvents = false;
                    proc.StartInfo.FileName = "rundll32.exe";
                    proc.StartInfo.UseShellExecute = true;
                    proc.StartInfo.Arguments = "c:/windows/system32/shimgvw.dll,ImageView_Fullscreen c:/DSC05765.JPG";
                    proc.Start();
                    proc.WaitForExit();

Não abre nada... nem visualizador... não dá erro... simplemente ameaça a abrir com a ampulheta e não faz nada.

 

 

Se eu executar isso aqui no CMD.EXE:

rundll32.exe c:/windows/system32/shimgvw.dll,ImageView_Fullscreen C:[barra inversa] DSC05765.JPG (Não sei pq quando coloca a barra inversa ele some)

 

Ele abre a imagem normalmente.

 

Sabe que eu estava reparando....

É que no CMD se eu colocar a barra normal ele não abre.... se eu colocar a barra ao contrario ele abre.

 

Nesse caso como posso colocar a barra inversa no C#, já que ele não aceita.

Quando coloco uma barra inversa no C# aparece a seguinte mensagem:

Unrecognized escape sequence

 

Valew pela forca Quintalab.

Compartilhar este post


Link para o post
Compartilhar em outros sites

PQP!!

 

deu certo...

nem acredito! uhahuahuahua

 

Acredita que por uma barra não fez o bagulho funcionar!

 

Se você fazer isso aqui:

proc.StartInfo.Arguments = "c:/windows/system32/shimgvw.dll,ImageView_Fullscreen c:/DSC05765.JPG";
Não funciona! Por causa da barra

 

 

 

Mas se você fizer isso aqui

proc.StartInfo.Arguments = "c:/windows/system32/shimgvw.dll,ImageView_Fullscreen c:[duas barras invertidas]DSC05765.JPG";
Dá certo!!!!! tem que colocar duas barras invertidas. (Não sei pq some as barras invertidas que eu digito)

 

 

Valew pela ajuda Quintelab..... Valew pela força!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tranquilo, outra coisa, se quiser ao invés de usar duas barras invertidas pode colocar um @ antes da string. Ficaria assim:

proc.StartInfo.Arguments = @"c:/windows/system32/shimgvw.dll,ImageView_Fullscreen c:[uma barras invertida]DSC05765.JPG";

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

E ai Quintelab...

 

Valew pela dica.

 

você leu a minha mente.... colocar o @ antes da String matou o meu problema de receber o caminho por um Text Box.

 

Valew mesmo

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.