none
Como abrir um executavel dentro de um windows form aplicattion? RRS feed

  • Pergunta

  • Olá,

    Minha dúvida e o seguinte, esto criando um Windows Form Applications, que é um Full Screen de um jogo. Porém nele eu quero fazer o seguinte, quero coloca um botão com nome "Abrir algum programa" é quando clicar em cima desse botão, aparece o programa que eu fiz. Quero coloca um arquivo .exe dentro de outro arquivo exe. Vocês poderiam me ajudar? É urgente para meu novo projeto.

    segunda-feira, 14 de março de 2016 00:17

Respostas

  • Você pode utilizar o SetParent como abaixo

    [DllImport("user32.dll", SetLastError = true)]
    static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
    
    private void button2_Click(object sender, EventArgs e)
    {
        var process = new Process();
        process.StartInfo.FileName = "notepad.exe";
        process.Start();
        SetParent(process.MainWindowHandle, panel1.Handle);
    }

    para remover utlize:

    SetParent(process.MainWindowHandle, IntPtr.Zero);

    Note que panel1 é onde você quer abrir sua aplicação.


    Aqui você encontra outro exemplo:
    http://www.codeproject.com/Articles/9123/Hosting-EXE-Applications-in-a-WinForm-project

    segunda-feira, 14 de março de 2016 01:29
  • Pelo que pude perceber, o problema é que em máquinas diferentes, os caminhos são diferentes.

    O Problema não está sendo como chamar, isso você já conseguiu na sua máquina, o problema é como padronizar o local de chamada.

    Correto ?


    Antero Marques

    • Marcado como Resposta Marcos SJ segunda-feira, 14 de março de 2016 16:41
    segunda-feira, 14 de março de 2016 03:01
  • Alehandroz,

    Você tem algumas opções para resolver isso.

    Uma é padronizando o local de instalação num diretório raiz de uma das unidades e testar em tempo de execução em qual unidade está.

    Utilizando o diretório padrão de instalação do Windows, podendo encontrar fácil assim:

    Environment.SpecialFolder.ProgramFiles ou Environment.SpecialFolder.ProgramFilesX86.

    Também pode setar uma variável de ambiente, como TEUAPPPATH.

    Pode setar uma chave no registro.

    Não importa o caminho que você vai tomar, tem que definir um método de padronização, depois que você fizer isso e tiver alguma dificuldade, pode contar conosco.

    Att,


    Antero Marques




    • Editado Antero Marques segunda-feira, 14 de março de 2016 03:51
    • Marcado como Resposta Marcos SJ segunda-feira, 14 de março de 2016 16:41
    segunda-feira, 14 de março de 2016 03:50

Todas as Respostas

  • Segue link com o caminho das pedras:

    Process Start

    Att,


    Antero Marques

    segunda-feira, 14 de março de 2016 00:38
  • Olá,

    Eu já tentei isso é consegui, mais ai abre apenas no meu computador o caminho do arquivo .exe Já em maquinas diferentes não abre

    segunda-feira, 14 de março de 2016 01:20
  • Você pode utilizar o SetParent como abaixo

    [DllImport("user32.dll", SetLastError = true)]
    static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
    
    private void button2_Click(object sender, EventArgs e)
    {
        var process = new Process();
        process.StartInfo.FileName = "notepad.exe";
        process.Start();
        SetParent(process.MainWindowHandle, panel1.Handle);
    }

    para remover utlize:

    SetParent(process.MainWindowHandle, IntPtr.Zero);

    Note que panel1 é onde você quer abrir sua aplicação.


    Aqui você encontra outro exemplo:
    http://www.codeproject.com/Articles/9123/Hosting-EXE-Applications-in-a-WinForm-project

    segunda-feira, 14 de março de 2016 01:29
  • Olá Cesar Cassiano Shimanco,

    Aonde eu ponho esse seu código? Lembrando que eu quero abrir um progama quando clicar em um button. 

    Aqui vai um exemplo do meu projeto

    http://i.imgur.com/4XiGWns.png

    segunda-feira, 14 de março de 2016 01:44
  • Alehandroz,

    Nesse caso, você quer acessar uma aplicação padrão do Windows, uma sua ou uma de terceiros ?

    Qual aplicação você quer chamar ?

    Att,


    Antero Marques


    segunda-feira, 14 de março de 2016 01:48
  • Antero Marques,

    Eu desejo abrir um programa .exe dentro de outro exe  que eu criei, para quando eu clicar em um Button aparecer o programa .exe que eu criei em outro programa.

    Nome da aplicação é "mousefly.exe"

    segunda-feira, 14 de março de 2016 01:59
  • Pelo que pude perceber, o problema é que em máquinas diferentes, os caminhos são diferentes.

    O Problema não está sendo como chamar, isso você já conseguiu na sua máquina, o problema é como padronizar o local de chamada.

    Correto ?


    Antero Marques

    • Marcado como Resposta Marcos SJ segunda-feira, 14 de março de 2016 16:41
    segunda-feira, 14 de março de 2016 03:01
  • Exato, ai pelo local ser diferentes em outras máquinas, quando clica no Button para abrir o programa não abre pelo fato de estar em um local diferente.

    Caso você ainda esteja em dúvidas, eu tenho um projeto aqui semelhante ao que eu pretendo fazer que achei na internet, é posso te fornecê-lo, para você saber como eu desejo é como funciona os processos.

    segunda-feira, 14 de março de 2016 03:31
  • Alehandroz,

    Você tem algumas opções para resolver isso.

    Uma é padronizando o local de instalação num diretório raiz de uma das unidades e testar em tempo de execução em qual unidade está.

    Utilizando o diretório padrão de instalação do Windows, podendo encontrar fácil assim:

    Environment.SpecialFolder.ProgramFiles ou Environment.SpecialFolder.ProgramFilesX86.

    Também pode setar uma variável de ambiente, como TEUAPPPATH.

    Pode setar uma chave no registro.

    Não importa o caminho que você vai tomar, tem que definir um método de padronização, depois que você fizer isso e tiver alguma dificuldade, pode contar conosco.

    Att,


    Antero Marques




    • Editado Antero Marques segunda-feira, 14 de março de 2016 03:51
    • Marcado como Resposta Marcos SJ segunda-feira, 14 de março de 2016 16:41
    segunda-feira, 14 de março de 2016 03:50
  • Antero Marques,

    Fiz esse vídeo de como eu desejo o meu projeto!

    Para facilitar mais o nosso processo.


    Repara que eu começo iniciando um jogo .exe é nele há um button, repara que ao clicar nesse button ele abre outro arquivo .exe  é assim que pretendo fazer o meu trabalho.

    https://www.youtube.com/watch?v=904mXgc-PcA 

    Por favor, peço que você veja o vídeo para esclarecer as dúvidas 

    segunda-feira, 14 de março de 2016 04:31
  • Olá,

    Consegui resolver meu problema obrigado pela ajuda/esforço.

    segunda-feira, 14 de março de 2016 16:26
  • Alehandroz,

    Que bom que conseguiu. Sempre que postar uma pergunta aqui no fórum, e chegar a solução sozinho, poste a solução encontrada para que outros que estejam com a mesma questão possam se basear.

    Att,


    Antero Marques

    segunda-feira, 14 de março de 2016 16:38
  • Olá,

    Antero Marques aconteceu outro probleminha aqui é não to conseguindo entender oque é? Poderia me explicar? Como so novo no vb não consigo compreender muito.

    Então quando eu inicio o aplicativo exe é clico no botão para abrir o meu executável aparece o seguinte error

    "Ocorreu uma exceção sem tratamento no aplicativo. Si você clicar em Continuar, o aplicativo ignorará esse erro e tentará continuar. Se clicar em Encerrar, o aplicativo será encerrado imediatamente.

    O sistema não pode encontrar o arquivo especificado."

    Link da imagem do erro: http://prnt.sc/af887j

    Como resolver isso ?


    segunda-feira, 14 de março de 2016 18:46
  • Alguém experiente no ramo poderia me ajudar com esse problema?
    terça-feira, 15 de março de 2016 02:37
  • O caminho do arquivo é inválido. Sugiro que você utilize o debug do Visual Studio, caso aconteça na sua máquina ou então trate a Exception e de no lugar do erro você mostra a mensagem com o caminho que está sendo utilizado. Algo tipo isso:

    string caminho = "...";
    try
    {
    	//execução do código qui...
    }
    catch (Exception ex)
    {
    	MessageBox.Show("Este é o caminho:" + caminho);
    	MessageBox.Show("Este e o erro:" + ex.ToString());
    }

    Depois de identificar o caminho vai ficar mais fácil encontrar o problema.

    terça-feira, 15 de março de 2016 03:34
  • Olá Cesar Cassiano Shimanco,

    Ainda não consegui, ver si o código está correto! Por favor.

    após feito isso está aparecendo um  erro diferente. Pode me ajudar?

    terça-feira, 15 de março de 2016 12:54
  • Não me dei conta que seu código era VB e não C#.

    Dim caminho As String = "seu_caminho"
    Try
        ...
    Catch ex As Exception
        MsgBox("caminho:" & vbCrLf & caminho)
        MsgBox("Erro:" & vbCrLf & ex.Message)
    End Try

    Deve ser isso o equivalente.

    terça-feira, 15 de março de 2016 15:52
  • Olá em "seu_caminho" coloco oque? Por que o erro que tá aparecendo é na hora de eu clica no button desse código

    Process.Start(My.Computer.FileSystem.SpecialDirectories.Temp & "sh.exe")



    • Editado Alehandroz terça-feira, 15 de março de 2016 21:56
    terça-feira, 15 de março de 2016 21:54
  • "seu_caminho" é exatamente o o que você passa como parâmetro, o My.Computer.FileSystem.SpecialDirectories.Temp & "sh.exe"

    Dim caminho As String = My.Computer.FileSystem.SpecialDirectories.Temp & "sh.exe"
    Try
        Process.Start(caminho)
    Catch ex As Exception
        MsgBox("caminho:" & vbCrLf & caminho)
        MsgBox("Erro:" & vbCrLf & ex.Message)
    End Try

    Seu sh.exe não existe no My.Computer.FileSystem.SpecialDirectories.Temp, este é o erro.


    quarta-feira, 16 de março de 2016 01:49
  • Olá Cesar Cassiano Shimanco,

    Já apareceu uma pista para resolver nosso problema, apareceu esse caminho


    Mais oque tenho que fazer para solucionar isso?  Diz que não foi possível encontrar o arquivo especificado certo. Mais oque tenho que fazer para achar?

    Eu faço tudo certo, ai creio eu que nesse caminho tem que criar um arquivo .TempNomeDoExecutavel.exe . Mais faço tudo certo é aparece esse erro na hora de da start e clico no botão


    • Editado Alehandroz quarta-feira, 16 de março de 2016 11:24
    quarta-feira, 16 de março de 2016 11:19
  • Por favor, alguem pode me ajudar? É urgente 
    quinta-feira, 17 de março de 2016 00:08
  • Pessoal consegui arrumar, porém quando clico no botão não acontece nada porque?
    quinta-feira, 17 de março de 2016 02:53
  • Pelo que podemos ver no MessageBox o caminho estava incorreto por faltar uma barra antes do nome do executável (fly.exe = \fly.exe) e acredito que é isso que você corrigiu.

    Quanto a não abrir... verifique no gerenciador de tarefas se o processo (fly.exe) está listado lá, se estiver, é sinal de que abriu e está rodando. Verifica também qual usuário é responsável por este processo.

    quinta-feira, 17 de março de 2016 03:45
  • Olhei na lista do gerenciador é não apareceu fly.exe, mais sim ele crio a pasta lá no AppLocal/Tempfly.exe que pego certo, porém esse fly.exe ele tem checkbox para poder ativar. Mais quando eu clico no botao não acontece nada não vai da pra utilizar, você saber resolver ?
    quinta-feira, 17 de março de 2016 11:36
  • Alguem me ajuda por favor? 
    quinta-feira, 17 de março de 2016 22:19
  • Você leu o que o Cesar falou ?

    Você corrigiu para que ele tente pegar o nome correto: C:\Users\JoaoCarlos\AppData\Local\Temp\fly.exe  ??

    Faça o seguinte teste, no lugar de usar a variável, use o caminho direto e veja se abre:

    Process.Start(@"C:\Users\JoaoCarlos\AppData\Local\Temp\fly.exe")


    Antero Marques


    quinta-feira, 17 de março de 2016 22:27
  • Sim tá tudo funcionando, o problema é que quando clico no botão ele apenas cria o arquivo Tempfly.exe lá no caminho, mais não abre o executável eu clico no botão é não aparece nada, não acontece nada. Apenas cria arquivo lá na pasta AppLocal/Tempfly.exe
    quinta-feira, 17 de março de 2016 22:34
  • Dentro do seu projeto, em recources existe um arquivo fly.exe, como ele vai parar em C:\Users\JoaoCarlos\AppData\Local\Tempfly.exe?

    sexta-feira, 18 de março de 2016 00:38
  • Aqui amigão, esse e o novo código é tá pegando perfeito, apenas o botão que tá com erro de quando clica em cima não acontece nada. Observa o código que você entendera o porque ele vai parar em "C:\Users\JoaoCarlos\AppData\Local\Tempfly.exe"

    sexta-feira, 18 de março de 2016 02:14
  • Alguem sabe resolver o problema do button? Ao clicar nele é não abrir nada?
    sexta-feira, 18 de março de 2016 12:57
  • Alguem sabe como resolver por favor? É apenas extrair um executavel e abrir-lo no vb.net
    sábado, 19 de março de 2016 01:50