none
Adicionar Programa na Inicialização RRS feed

  • Pergunta

  • Boa noite a todos!

    Estou desenvolvendo um app, é apenas um programa que complementa um instalador, nada demais, apenas uso pessoal. Porém estou com um erro, não é erro de código, suspeito ser erro de permissão(Alterações com Administrador, embora eu seja administrador haha) o erro é o seguinte 

    System.IO.IOException: 'Não foi possível concluir a operação porque já existe um diretório no caminho 'C:\Users\Igor Luque\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup'.'
    

    eu fiz certinho o Import do IO.

    Para que vocês entendam melhor, o aplicativo consiste em pegar um arquivo em um diretório e checar se ele existe e se ele existir movê-lo para a pasta de StartUP do windows: (C:\Users\Igor Luque\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

    )

    Código que fiz: 

    If My.Computer.FileSystem.FileExists("C:\tecnosoft\TecnoSoftLauncher.exe") Then
    
                My.Computer.FileSystem.MoveFile("C:\tecnosoft\TecnoSoftLauncher.exe", "C:\Users\Igor Luque\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup")
    
            Else
                MsgBox("Este Arquivo não existe")
    
            End If

    Será que estou me equivocando em algo?? Não consigo achar o erro! Talvez eu não possa simplesmente jogar o arquivo para a pasta assim, o interessante é que se você arrasta-lo de qualquer lugar do seu computador ele irá normalmente! Se isso não for possível tem em VB alguma outra solução? 

    PS: Ja tentei usar o comando CopyFile no lugar de MoveFile.

    Se puderem me ajudar ficaria imensamente grato!

    sexta-feira, 6 de julho de 2018 03:55

Respostas

  • Olá Marcus

    desculpe a demora, só pude dar continuidade agora.

    O que descreveu não solucionou meu problema, mas eu dei outro jeito, eu queria apenas automatizar, mas a minha solução foi rápida e eficaz também. De qualquer forma, agradeço o tempo e os conhecimentos. Valeu

    quarta-feira, 11 de julho de 2018 23:33

Todas as Respostas

  • Bom dia Igor,

    Se for apenas para colocar a tua aplicação para subir junto com o windows (Inicialização Automatica) eu recomendo vc fazer esse codigo:

    Public Sub GravaInicializacaoAutomatica(ByVal gravar As Boolean)
    
                If gravar Then
    
                    'Cria uma nova chave sob  HKEY_LOCAL_MACHINE\Software\Microsoft\windows\currentversion\run
                    Dim key As RegistryKey = Registry.LocalMachine.OpenSubKey("Software\Microsoft\windows\currentversion\run", True)
    
                    'Inclui o sistema na inicialização automática
                    key.SetValue("NOME_DO_SISTEMA", System.Windows.Forms.Application.ExecutablePath)
    
                Else
    
                    'Cria uma nova chave sob  HKEY_LOCAL_MACHINE\Software\Microsoft\windows\currentversion\run
                    Dim key As RegistryKey = Registry.LocalMachine.OpenSubKey("Software\Microsoft\windows\currentversion\run", True)
    
                    'Exclui o sistema da inicializaão automática
                    key.SetValue("NOME_DO_SISTEMA", "")
    
                End If
    
            End Sub

    Agora se for copiar mesmo um arquivo, acho melhor usar a classe System.IO.File, pq já tive alguns problemas com o My.Computer.FileSystem...

    System.IO.File.Move("PATH_ANTIGO", "PATH_NOVO")

    Vlw, espero ter ajudado.

    sexta-feira, 6 de julho de 2018 11:35
  • Boa Tarde amigo!
    Obrigado pela resposta!

    Eu fiz como você disse no primeiro caso, tive que fazer um import:

    Imports Microsoft.Win32


    Porém o meu programa que quero colocar com a inicialização também é um programa criado no visual studio, e não sei se colocar o nome dele aqui resolveria: 

    ''Inclui o sistema na inicialização automática
    key.SetValue("TecnoSoftLauncher.exe", System.Windows.Forms.Application.ExecutablePath)

    Então estou com o seguinte problema, não consigo fazer com que ele busque o programa.

    Outro problema que também não entendi foi que eu queria que ele executasse isso no button click e desta forma que me enviaste não funciona assim! 

    Se não fui claro eu me explico melhor!
    A segunda opção também não funcionou.

    Mesmo assim agradeço a reposta e a disponibilização do seu conhecimento comigo, grato!

    sexta-feira, 6 de julho de 2018 12:20
  • Então Igor,

    O caminho da sua aplicação já é trazida pelo seguinte codigo:

    System.Windows.Forms.Application.ExecutablePath

    Onde eu coloquei NOME_DO_SISTEMA é só um nome para ser apresentado no gerenciador de tarefas

    Então faça o seguinte teste...

    No evento Click do botão chame o metodo assim:

    Private Sub btnGravar_Click(ByVal Sender As System.Object, ByVal e As System.EventArgs) Handles btnGravar.Click
    
        GravaInicializacaoAutomatica(true)
    
    End Sub

    Então reinicie o computador e quando subir o windows o sistema tem que rodar junto.

    sexta-feira, 6 de julho de 2018 12:29
  • Então Igor,

    O caminho da sua aplicação já é trazida pelo seguinte codigo:

    System.Windows.Forms.Application.ExecutablePath

    Onde eu coloquei NOME_DO_SISTEMA é só um nome para ser apresentado no gerenciador de tarefas

    Então faça o seguinte teste...

    No evento Click do botão chame o metodo assim:

    Private Sub btnGravar_Click(ByVal Sender As System.Object, ByVal e As System.EventArgs) Handles btnGravar.Click
    
        GravaInicializacaoAutomatica(true)
    
    End Sub

    Então reinicie o computador e quando subir o windows o sistema tem que rodar junto.

    Amigo, Fiz dessa forma e deu:

    System.Security.SecurityException: 'Acesso ao Registro solicitado não é permitido.'

    Será que eu teria que permitir algo?

    E eu não sei se você entendeu o que quis dizer, eu estou fazendo uma espécie de instalador para outro aplicativo meu, então ao invés de botar esse programa na inicialização, seria outro programa. Digamos que eu queira por exemplo colocar o app do Google Chrome na inicialização com meu aplicativo. Me entende? hahah Porém no lugar do Chrome, seria outro app criado no VS.

    Obrigado

    sexta-feira, 6 de julho de 2018 13:14
  • Certo,

    Entao pra iniciar um outro sistema, a partir do seu, usa a classe Process assim:

    Process.Start("c:\NOME_DO_SISTEMA.exe")

    sexta-feira, 6 de julho de 2018 15:46
  • Olá Marcus

    desculpe a demora, só pude dar continuidade agora.

    O que descreveu não solucionou meu problema, mas eu dei outro jeito, eu queria apenas automatizar, mas a minha solução foi rápida e eficaz também. De qualquer forma, agradeço o tempo e os conhecimentos. Valeu

    quarta-feira, 11 de julho de 2018 23:33