none
Desinstalação em Pocket Pc RRS feed

  • Pergunta

  •  Olá amigos ...

     Tenho uma aplicação que não pode ser desinstalada porque ela continua em execução. Então me MANDARAM construir uma Dll para matar a execução desse programa e dessa forma ele possa ser desinstalado.

     A Dll eu me viro pra fazer , mas o problema é como fazer o Windows CE chamar essa Dll no momento da desinstalação ? Exemplo :  O usuario vai lá em "settings...programs....remove". Nesse ponto se deve chamar a Dll.

     Obrigado desde já !

    quinta-feira, 26 de outubro de 2006 13:13

Todas as Respostas

  • Colega, esta sua aplicação está sendo encerrada/finalizada corretamente? Você utiliza o Application.Exit para sair de sua aplicação? Isso é muito estranho, nunca presenciei este tipo de situação.

    Sei que na pasta onde é instalado o aplicativo se tiver sido criado algum arquivo que não conste no CAB, esta pasta não será excluída. Outra coisa de poderá gerar algum problema na desinstalação é alguma DLL do SQL Server Mobile que teima em ficar residente, mais aí, você resolve dando um reset em seu Pocket PC e em seguida fazer a desinstalação.

    José Roberto Siqueira
    RMGR Soluções e Serviços em Mobile  
    MSN: jrsiqueira@hotmail.comSkypeID: jrsiqueira
    Meu livro "Programação do Pocket PC com eMbedded Visual Basic" já à venda.

    Meu blog sobre mobilidade: http://jrsiqueira.spaces.live.com

    terça-feira, 31 de outubro de 2006 12:47
  •  Caro José Roberto, obrigado pela atenção !

      Eu não tenho essas informações que vc me pediu , até porque eu ainda não vi o fonte desde programa, simplesmente me pediram para resolver este problema.

      A boa noticia é que eu descobri uma forma de solucionar este problema atravéz de uma " Setup Dll"....

     Agora a má noticia é que tenho que usar C++ e as APIs do windows, e estou tendo muita dificuldade em construir essa Dll .

      Consegui construir o "esqueleto" dessa Dll com as funções Install_Init, Install_Exit, Uninstall_Init e Uninstall_Exit. Depois desses passos não consegui desenvolver mais nada.
     Qualquer dica é muito bem-vinda !!! 

    terça-feira, 31 de outubro de 2006 13:08
  • Olha, você não precisa usar C++ puro pra isso não. É meio chato, mas uma vez que você tenha feito um 'Custom Installer' desses, todos os outros serão muito parecidos.

    Dá uma olhada nesses artigos:

    http://www.devx.com/wireless/Article/31198 (VS 2005)

    http://msdn2.microsoft.com/en-us/library/ms838273.aspx (VS 2003).

    Avisa se precisar de ajuda.

    quarta-feira, 1 de novembro de 2006 14:09
    Moderador
  •   Vou dar uma olhada e se precisar de ajuda eu aviso sim !

      obrigado

    quarta-feira, 1 de novembro de 2006 20:29
  •  Olá , voltei ( agora com mais duvidas).

     Eu terminei de construir a minha setup dll, porém qdo fui testar , a aplicação não foi instalada ...

     A parte do codigo para instalação eu se quer mexi, usei ela de forma padrão .

     O codigo ficou assim :

     

     

    #include <windows.h>

    #include "stdafx.h"

    #include "ce_setup.h"

     

    #ifdef _DEBUG

    #define new DEBUG_NEW

    #endif

     

    enum codeINSTALL_INIT

    { codeINSTALL_INIT_CONTINUE=0,

    codeINSTALL_INIT_CANCEL

    };

    enum codeINSTALL_EXIT

    { codeINSTALL_EXIT_DONE=0,

    codeINSTALL_EXIT_UNINSTALL

    };

    enum codeUNINSTALL_INIT

    { codeUNINSTALL_INIT_CONTINUE=0,

    codeUNINSTALL_INIT_CANCEL

    };

    enum codeUNINSTALL_EXIT

    { codeUNINSTALL_EXIT_DONE=0

    };

     

    codeINSTALL_INIT Install_Init(HWND hwndParent,

    BOOL fFirstCall,

    BOOL fPreviouslyInstalled,

    LPCTSTR pszInstallDir)

    {

    AFX_MANAGE_STATE(AfxGetStaticModuleState());

     

    return codeINSTALL_INIT_CONTINUE;

    }

    codeINSTALL_EXIT Install_Exit(HWND hwndParent,

    LPCTSTR pszInstallDir,

    WORD cFailedDirs,

    WORD cFailedFiles,

    WORD cFailedRegKeys,

    WORD cFailedRegVals,

    WORD cFailedShortcuts)

    {

    AFX_MANAGE_STATE(AfxGetStaticModuleState());

    return codeINSTALL_EXIT_DONE;

    }

    codeUNINSTALL_INIT Uninstall_Init(HWND hwndParent,

    LPCTSTR pszInstallDir)

    {

    .

    AFX_MANAGE_STATE(AfxGetStaticModuleState());

    Processos pro ;

    pro.Kill("nomeaplicacao.exe");

    return codeUNINSTALL_INIT_CONTINUE;

    }

    codeUNINSTALL_EXIT Uninstall_Exit(HWND hwndParent)

    {

    AFX_MANAGE_STATE(AfxGetStaticModuleState());

    return codeUNINSTALL_EXIT_DONE ;

    }

     

    BEGIN_MESSAGE_MAP(Cce_setupApp, CWinApp)

    END_MESSAGE_MAP()

    Cce_setupApp::Cce_setupApp()

    {

    }

     

    Cce_setupApp theApp;

    BOOL Cce_setupApp::InitInstance()

    {

    CWinApp::InitInstance();{}

    return TRUE;

    }

    quinta-feira, 23 de novembro de 2006 13:49