Avatar de Desconhecido

Recuperação de Arquivos

Olá, lembra quando aquela pasta com fotos que você jurava que tinha uma cópia e depois que formatou descobriu que não existia nada guardado.

Quando você formata o computador ele ‘apaga’ os dados, mas nem sempre é bem assim. A formatação, dependendo do método que você escolher é lógica, limpando apenas as referências para os arquivos, deixando os dados ainda no disco só que sem algo que indique aonde ele está e que tipo de arquivo que é.

Então quando acontecem eventos como o citado no inicio do post ainda é possível recuperar arquivos desde que eles ainda não tenham sido sobrescritos. Para nos auxiliar nesta tarefa existe o QPhotorec que é um programa que varre os arquivos em busca de dados perdidos ou formatados.

Mais a respeito pode ser visto Qphotorec

 

Avatar de Desconhecido

Verificando se programa já está em execução

Para saber se o programa em NET está em execução basta utilizar o método GetProcessesByName(string) disponível na classe Process.

Veja o trecho abaixo:

string programa = Process.GetCurrentProcess().ProcessName;

if (Process.GetProcessesByName(programa).Length > 1)
{
    Console.WriteLine("Este programa já esté em execução.");
    return;
}
// processamento...

A primeira linha utiliza o método GetCurrentProcess() e a propriedade ProcessName para buscar o nome do processo ativo. Na segunda linha é um teste utilizando a função GetProcessesByName(string) passando como string o nome do método encontrado na função anterior, se o número de processos retornados for maior do que 1, quer dizer que ele já está em execução. No caso do fluxo a gente avisa ao usuário e fecha o programa.

Também é possivel verificar outras informações do processo em execução como PID e nome do Processo. O código abaixo aborta o programa através do id do processo identificado, fechando a versão anterior ao invés de fechar a versão atual.

Process currentProcess = Process.GetCurrentProcess();

Process []processes = Process.GetProcessesByName(currentProcess.ProcessName);
           
foreach (Process proc in processes)
     {
                if (proc.ProcessName == currentProcess.ProcessName && proc.Id != currentProcess.Id)
                {
                    Console.WriteLine("Nome do Processo {0}", proc.ProcessName);
                    Console.WriteLine("Id do Processo {0}", proc.Id);
                    Console.WriteLine("Nome do Maquina {0}", proc.MachineName);
                    Console.WriteLine("Nome do Modulo Principal {0}", proc.MainModule);

                    proc.Kill();
                }
            }

            // processamento...
Avatar de Desconhecido

Connection String no app.config

Bom, resolvi re-escrever este post sobre como acessar a connection String no arquivo de configuração passando algumas formas novas de fazer isso.
Para quem utiliza o NET 3.5 deve utilizar o ConfigurationManager que tem um código um pouco moroso para poder fazer o acesso as configurações.

// NET 3.5
myString = System.Configuration.ConfigurationManager.ConnectionStrings
            ["ERP.Properties.Settings.ERPConnectionString"].ToString();

Para que o código acima funcione o assembly configuration deve ser adicionado ao projeto.

A partir do NET 4.0 temos um novo meio (na minha opnião mais elegante) de fazermos a mesma coisa. Abaixo o código que podemos utilizar para acessar por exemplo a propriedade ConnectionString definida no settings do projeto.

myString = Properties.Settings.Default.ConnectionString;
Avatar de Desconhecido

Teste and Depure seus ASP.NET WebServices locamente

Sabe quando você está rodando a aplicação no seu celular conectando no webservice e um erro estranho acontece. Você tenta enviar alguma mensagem de retorno para explodir o problema para que possa depurá-lo no eclipse, mas isto é bastante cansativo. Uma via interessante seria pode depurar a aplicação no Android e o WebService no Visual Studio ao mesmo tempo, assim mais facilmente você consegue identificar o problema e realizar as correções.

Nesta hora você já pega o Visual studio e roda o WebService locamente e já aponta a URL no Eclipse e manda executar e nada acontece. Faz ajustes mas sempre dá erro de conexão. Faz de tudo para consertar mas após várias tentativas o erro persiste.

O Visual Studio vem com um IIS integrado que é utilizado para realizar a depuração dos sites no ambiente de desenvolvimento, mas por padrão ele bloqueia requisições que não sejam realizadas da máquina local. Existem 2 formas de se contornar este problema, uma das alternativas é alterando o arquivo de configuração do IIS na mão. No IIS existe um arquivo que você pode editar, mas ao criar novos sites ele provavelmente vai ser reescrito, ou a entrada para seu site será alterada e você terá de fazer o processo novamente. No no caso do VS2012 ele não vai aceitar que você modifique ele te obrigando a fazer mais alguns ajustes. Então para poder depurar existe uma segunda opção que é o SharpProxy, que é uma solução simples que encontrei neste site.

Bem, se você é usuário do VS 2012 você vai dizer que já está rodou ele mas o webservice ainda não responde. É que no IIS Express a coisa piora um pouco mas já existe uma nova versão dele que já contorna o problema sobrescrevendo o host header.

SharpProxy

Basta selecionar a opção Rewrite host headers que irá funcionar também no VS 2012.

Avatar de Desconhecido

Curso Arduino

Em minhas pesquisas na internet achei um curso de Arduino que achei bastante interessante. Para quem não sabe o Arduino é uma plataforma de prototipagem eletrônica bastante completo baseada no microcontrolador Atmel AVR e que permite realizar algumas tarefas de automação para artistas amadores, e mesmo para quem atua na área, ele auxilia bastante na montagem de protótipos funcionais.

O curso é uma introdução, mas dá uma noção para quem quer se aventurar com estes equipamentos. Depois posto mais dizendo se consegui entender algo, ou mesmo se cheguei a fazer alguma coisa.

Muito legal ele, abaixo segue também o link do blog do autor.

http://renatoaloi.blogspot.com.br/

Avatar de Desconhecido

Formatar Navcity NT-1710 (sem senha)

Bom, hoje em dia quase todo mundo tem um tablet, e vira e mexe alguém perde o email ou senha e precisa que ou recuperemos eles, ou na maioria das vezes, formatemos o celular.
Bom encontrei um vídeo que mostra como formatar o Navcity NT-1710, depois de vários sites e dicas, que não funcionaram no meu. Parece que o Navcity tem várias ROOMS, com formas diferentes de fazer. Mas ai vai a que funcionou no meu caso.

Na essência tem várias dicas na web que solicitam que seja feito o que é muito comum em aparelhos no Android, desligar o celular e ligar ele apertando o botão power mais o botão de volume (+ ou -, ou os dois juntos). No caso deste vi gente que também pedia para que ao desligar o aparelho pressionasse o botão de menos. Mas o que me surpreendeu neste é que a solução é com o aparelho ligado, apertar simultaneamente o botão power mais o botão de volume para cima, no caso ele pede para reiniciar já entrando no modo recovery, a partir dai basta fazer o que a maioria dos links sugerem, que é escolher o modo “Wipe Data/factory reset”.

Está ai, espero que ajude a alguém. Posta ai se foi útil para vc também.

Avatar de Desconhecido

Criar Instaladores com o Wix (Parte 2)

Este é mais um post da série que mostra como Criar Instaladores com o Wix, em que a primeira parte pode ser vista aqui. Neste post pretendo mostrar como melhorar o instalador que a gente criou no post anterior. Até agora temos um *.wxs que não faz nada e nem instala nada. Para melhora isto temos que adicionar algumas funcionalidades.

Melhorando o Instalador

Na versão que temos até agora só temos o esqueleto do instalador. Temos de adicionar informações sobre os recursos que desejamos instalar. Em http://wix.sourceforge.net/manual-wix3/votive_project_references.htm temos uma lista das referências mais comuns utilizadas em projetos no Visual Studio. Para este exemplo vamos utilizar a variável $(var.MyProjectName.TargetPath) indicando o nome do projeto ao qual vamos gerar o executável. Para funcionar você também deverá adicionar o projeto como referência no Wix. Para isso clique com o direito no projeto e em Add References…, escolha Projects e localize o projeto.

Para isso descomente as linhas com a tag Component

<!-- <Component Id="ProductComponent"> -->

e adicione o código, lembrando de substituir pelo nome de seu projeto o WindowsFormsApplication2TesteInstaller:

<File Source="$(var.WindowsFormsApplication2TesteInstaller.TargetPath)" DiskId="1" />

Após isso pode gerar o build novamente que o projeto já aparecerá após a compilação os arquivos:

Arquivos gerados

Arquivos gerados

O arquivo SetupProjectWix.wixpdb é um arquivo gerado como resultado que não precisa ir para o cliente, ele tem outras funcionalidades. Os outros dois são necessários de serem colocados na distribuição. Esse instalador funciona, porém não gera nenhuma tela. Este será o assunto do próximo tópico.

Interface Padrão

O Wix XML permite configurar algumas interfaces padrão, e tem recursos para GUI personalizadas também, como configuração de alguma variável que o programa precisará definir de acordo com a preferência do usuário na instalação. Para isso você deverá adicionar uma referência no projeto para a WixUIExtension.dll que está no diretório de instalação do Wix, e no arquivo *.wxs adicionar dentro da tag products.

<UIRef Id="WixUI_Mondo"/>
<UIRef Id="WixUI_ErrorProgressText" />

Existem algumas interfaces disponíveis no Wix:

  • WixUI_Minimal – Somente a tela de instalação
  • WixUi_InstallDir – Permite escolher o diretório de instalação
  • WixUI_FeatureTree – Permite escolher as opções (recursos) a serem instalados
  • WixUI_Mondo – Instalação completa – todos os recursos anteriores.
  • É interessante você testar os recursos para ver quais se adequam as necessidades.

    Configurando Licença

    A licença é controlada pela variável WixUILicenseRtf que deverá ter o valor do RTF da licença. Alguns autores recomendam, para fins evitar problemas de compatibilidade, que o arquivo seja feito com o WordPad

    <WixVariable Id="WixUILicenseRtf" Value="F:\DocLicenca.rtf" />
    

    Recursos

    Os recursos instalados são mostrados na tela abaixo:

    escolha de recursos

    Para habilitar a escolha do local você tem que colocar o atributo ConfigurableDirectory na Tag Feature principal do projeto:

    <Feature Id="ProductFeature" Title="SetupProjectWix" Level="1" ConfigurableDirectory="INSTALLFOLDER">
    	<ComponentGroupRef Id="ProductComponents" />
    </Feature>
    

    Para configurar outras opções você deve criar novos componentes. Cada componente deve corresponder a um conjunto de funcionalidades. Veja abaixo o exemplo dos componentes:

    <Fragment>
        <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
          <Component Id="MainExecutable">
           <File Source="$(var.WindowsFormsApplication2TesteInstaller.TargetPath)" DiskId="1"/>
          </Component>
          <Component Id="ComponentRegistry">
            <File Source="file.txt" DiskId="1"/>
          </Component>
          <Component Id="ComponentArquivo">
            <File Source="file2.txt" DiskId="1"/>
          </Component>
        </ComponentGroup>
      </Fragment>
    

    Também é necessário definir novas Features, lembrando que o nível(atributo Level) das mesmas terá impacto no que aparecerá nas opções:

    <Feature Id="ProductFeature" Title="SetupProjectWix" Level="2" ConfigurableDirectory="INSTALLFOLDER">
          <ComponentGroupRef Id="ProductComponents" />
        </Feature>
        <Feature Id="SubFeatureRegistry" Title="Registro" Level="5" ConfigurableDirectory="INSTALLFOLDER">
          <ComponentGroupRef Id="ProductComponents" />
        </Feature>
        <Feature Id="SubFeatureFile" Title="File" Level="4" ConfigurableDirectory="INSTALLFOLDER">
          <ComponentGroupRef Id="ProductComponents" />
        </Feature>
    

    Na instalação padrão o level inicial é 1, quando você escolhe Tipical ele e configurado para 3 e quando você escolhe completa ele é configurado para 1000. Então selecionando Tipical tudo que tiver level menor ou igual a 3 será instalado e o que tiver level maior do que 3 não será instalado. Veja a Figura abaixo

    Nivel de componentes

    No próximo post mostro como customizar as telas do instalador.

    Avatar de Desconhecido

    Criar Instaladores com o Wix (Parte 1)

    Introdução

    Depois de meses de trabalho e muita dedicação, com várias etapas, aprendizado e desafios. Você compila o projeto, coloca em uma pasta no pen-drive e entrega para o cliente, explicando os vários arquivos que devem ser modificados, o que deve ser instalado para o software funcionar, as chaves no registro a serem alteradas. Essa forma de entrega ficou um pouco defasada, um trabalho tão bonito não pode ser entregue dessa forma. Assim para dar um toque profissional você deve criar um instalador que simplifica as etapas de implantação e evita diversas dores de cabeça. A partir do Visual Studio 2012 o instalador padrão, que era desenvolvido junto com a ferramenta, não é mais disponibilizado. Agora somente existe uma versão gratuita do InstallShield que para utilizá-la você deve entrar no site da empresa e se cadastrar. Porém o foco desse material é criar instaladores com o Wix, um instalador openSource baseado em xml que é muito poderoso. Porém para poder explorá-lo você terá de colocar um pouco a mão na massa.

    Wix Installer

    Wix

    Para instalar o WIX você deverá acessar a página do produto através deste link na página do CodePlex. Lá você encontra o binário do Wix na última versão, código fonte do produto e acesso a documentação padrão do mesmo. No momento em que este texto foi escrito estava disponível a versão 3.8 do instalador. Localize o último release e realize o download.

    Após a instalação você perceberá no Visual Studio uma nova guia na hora que você for adicionar os projetos com o nome “Windows Installer Xml” que pode ser visto abaixo

    Visual Studio

    Abrindo o arquivo WXS

    Para a criação do instalador com a Ferramenta você precisa definir um *.wxs que contém a configuração de como funciona o comportamento do Wix,

    <?xml version="1.0" encoding="UTF-8"?>
    <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" 
         xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension"
         xmlns:util="http://schemas.microsoft.com/wix/UtilExtension" >
      <Product Id="*" Name="SetupTeste" Language="1033" Version="1.0.0.0" Manufacturer="LEalpjm" UpgradeCode="55f8e4e7-6f95-4b4c-a9ee-5b4005d70175">
        <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
    
        <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
        <MediaTemplate />
    
        <Feature Id="ProductFeature" Title="SetupTeste" Level="1">
          <ComponentGroupRef Id="ProductComponents" />
        </Feature>
    
        <Binary Id="CustomAction1.CA.dll"
               src="$(var.CustomAction1.TargetDir)CustomAction1.CA.dll" />
    
        <InstallExecuteSequence>
          <Custom Action="AssignConfigFile" After="CostFinalize" />
          <Custom Action="EnableSession" Before="ConfigurAppConfig" />
          <Custom Action="ConfigurAppConfig" After="InstallFiles"></Custom>
        </InstallExecuteSequence>
    
      </Product>
    

    Entre os locais onde se encontra bom material de referência sobre a ferramente estão os endereços:

  • http://wixtoolset.org/documentation/manual/v3/
  • http://wix.tramontana.co.hu/tutorial
  • Nestes locais temos ótimo material de referência e ambos me ajudaram em muitas das dúvidas relacionadas a criação de projetos com o Wix.
    Uma observação importante é que apesar de o Wix estar sobre uma licença Microsoft Reciprocal License (MS-RL) os instaladores criados a partir da ferramenta podem ter licenças proprietárias, a MS-RL aplica-se somente a trabalhos derivados no desenvolvimento do próprio Wix.

    Para a utilização do Wix como ferramenta de instalação sugiro configurar o Path do Windows para que seja possível utilizar a linha de comando de forma prática. Um bom tutorial de como configurar o path do Windows pode ser visto aqui. (link para título 2).
    Após a instalação do Wix e a configuração do path, vamos entender como a ferramenta funciona. Se você precisa entender como configuara o path, veja este link.

    Wix Components

    O Wix é composto por alguns executáveis que podem ser encontrados na pasta de instalação, aqui segue a descrição dos principais

  • Candle.exe – Transforma o fonte Wix (*.wxs) em um arquivo intermediário *.wixobj
  • Light.exe – Transforma o arquivo intermediário (*.wixobj) em um instalador
  • Dark.exe –Convert um MSI em apropriados WXS files
  • Lit.exe –Gera bibliotecas que podem ser utilizadas em outros projetos
  • Para a criação de um instalador devemos escrever os arquivos WXS que é um xml com formatação própria, e de posse dele gerar o arquivo WIXOBJ através do candle.exe, e utilizar o light.exe para gerar o MSI a partir do WIXOBJ gerado na etapa anterior.

    GUID

    Também é importante falar sobre as GUIDs agora, se você ainda não conhece as GUID são identificadores únicos que permitem ao Windows reconhecer seu programa de forma única. Para o Windows Installer isso é importante, uma vez que através dele e possível reconhecer sua aplicação e saber que ela não é qualquer outra, para isso o GUID deve ser único.

    O Guid é um número hexadecimal longo com este formato:

    CE26AD1E-30D5-4E03-8CBE-6DF5C23AA833
    

    Para gerar GUIDs existem vários utilitários, se você pode utilizar o padrão do Visual Studio no menu Tools > Create GUID.
    Você precisará de pelo menos 3 GUIDs no seu projeto, um para o produto (atributo Id da Tag produto>, um para o atributo UpgrateCode e um para cada Package que você criar no projeto. Os GUID do Produto e o do UpgradeCode não devem ser modificados, são através deles que o Windows identificará seu produto e as atualizações do mesmo. Porém os GUIDs dos packages são únicos, e uma forma interessante de garantir isso é deixando um * (asterisco) no lugar do GUID, pois assim a cada compilação será gerado um GUID único.

    <?xml version="1.0" encoding="UTF-8"?>
    <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    	<Product Id="*" Name="SetupProjectWix" Language="1033" Version="1.0.0.0" Manufacturer="" UpgradeCode="{7E237DD6-9B52-47E2-B9BB-2672FF0712FF}">
    	<Package Id="*" InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
     
    	<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
    		<MediaTemplate />
     
    		<Feature Id="ProductFeature" Title="SetupProjectWix" Level="1">
    			<ComponentGroupRef Id="ProductComponents" />
    		</Feature>
    	</Product>
     
    	<Fragment>
    		<Directory Id="TARGETDIR" Name="SourceDir">
    			<Directory Id="ProgramFilesFolder">
    				<Directory Id="INSTALLFOLDER" Name="SetupProjectWix" />
    			</Directory>
    		</Directory>
    	</Fragment>
     
    	<Fragment>
    		<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
    			<!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. -->
    			<!-- <Component Id="ProductComponent"> -->
    				<!-- TODO: Insert files, registry keys, and other resources here. -->
    			<!-- </Component> -->
    		</ComponentGroup>
    	</Fragment>
    </Wix>
    

    Agora podemos compilar a primeira versão do instalador. Para compilar esse projeto é da mesma forma que fazemos com qualquer instalador Windows, basta realizar um build que o resultado gerado na pasta bin/Debug ou bin/Release será o arquivo *.msi de instalação. Esse é um instalador simples, na verdade tão simples que não instala nada.

    No próximo post vou falar sobre como melhorar este instalador

    Referências:

  • http://msdn.microsoft.com/en-us/magazine/cc163456.aspx
  • http://wix.tramontana.co.hu/tutorial
  • Avatar de Desconhecido

    Configurar variável path de ambiente no Windows

    Uma variável de ambiente ou de sistema são variáveis disponíveis para todas as aplicações que executam sobre um sistema operacional. No caso do Windows são elas que permitem que você abra o prompt do DOS e digite regedit e como mágica abra o Registro do Windows em seu computador. Você provavelmente nem faça idéia de onde o regedit está, mas o Windows sabe e torna ele acessível apenas com a digitação do nome. Esta regra não vale para a pesquisa do Windows, que utiliza um sistema de indexação que é bem diferente do assunto deste post.

    Bem, só para informação o regedit fica em “C:\Windows\SysWOW64” se o seu sistema for 64 bits ou C:\Windows\System se ele for de 32 bits.

    Configurar a variável path no Windows permite armazenar na memória caminhos onde as aplicações compartilham para uma busca rápida por aplicativos, normalmente com o objetivo de inicializar programas (nem sempre por linha de comando).
    Para configurar a variável basta entrar no Painel de Controle > Sistema > Configurações Avançadas e esta tela de abrirá para que sejam feitas as configurações.

    Propriedades do Sistema

    Propriedades do Sistema

    Na Janela Propriedades do Sistema, basta clicar em Variáveis de Ambiente

    Variáveis de Ambiente

    Variáveis de Ambiente

    E na Janela Variáveis de Ambiente, no Grupo Variáveis do sistema, clicar em Path e Adicionar o caminho desejado no final, separando por ponto e vírgula do texto anterior.

    CUIDADO!: Alterar estas configurações de forma indevida, como apagar uma das entradas já existentes, pode causar um comportamento estranho de todo o sistema Windows. Então mexa com cuidado que você não terá problemas.

    Site de Referência: http://technet.microsoft.com/pt-br/library/cc668471.aspx