ERRO RUN SHELL

GRECARDOSO 27/05/2014 05:09:50
#438521
Bom dia ,

Tenho um programa que gera um relatório , assim que a pessoa clica em save ele gera esse log e abre o notepad imediatamente com todas as informações do que foi gerado :

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
[ô] aqui, será criado o arquivo, nesse exemplo chamado de log.txt,
[ô] que se encontra na mesma pasta do executável.
Dim FileHolder As FileInfo = New FileInfo(Application.StartupPath & [Ô]\log.txt[Ô])
Dim WriteFile As StreamWriter = FileHolder.CreateText
[ô] aqui são escritas as linhas do arquivo.
[ô] é claro que você irá imprimir o conteúdo das TextBoxes do formulário,
[ô] então é só substituir nos locais corretos pelos dados da TetxBox,
[ô] por exemplo: WriteFile.WriteLine([Ô]Produto: [Ô] & TxtProduto.Text)
WriteFile.WriteLine([Ô]=====================================[Ô])
WriteFile.WriteLine([Ô]Name: [Ô] & nomebox.Text)
WriteFile.WriteLine([Ô]Laper: [Ô] & TextBox2.Text)
WriteFile.WriteLine([Ô]Protocol SR: [Ô] & protocolo.Text)
WriteFile.WriteLine([Ô]=====================================[Ô])
WriteFile.WriteLine([Ô][Ô])
WriteFile.WriteLine([Ô]Category: [Ô] & ComboBox2.Text)
WriteFile.WriteLine([Ô]S.O: [Ô] & ComboBox3.Text)
WriteFile.WriteLine([Ô]Connection: [Ô] & ComboBox4.Text)
WriteFile.WriteLine([Ô]OEM: [Ô] & ComboBox5.Text)
WriteFile.WriteLine([Ô]Language: [Ô] & ComboBox6.Text)
WriteFile.WriteLine([Ô]Provider: [Ô] & ComboBox8.Text)
WriteFile.WriteLine([Ô]AntiVirus: [Ô] & ComboBox9.Text)
WriteFile.WriteLine([Ô]=====================================[Ô])
WriteFile.WriteLine([Ô][Ô])
WriteFile.WriteLine([Ô]How Long Is?: [Ô] & TextBox5.Text)
WriteFile.WriteLine([Ô]Error Code: [Ô] & TextBox6.Text)
WriteFile.WriteLine([Ô]Additional Information: [Ô] & RichTextBox1.Text)
WriteFile.WriteLine([Ô]=====================================[Ô])
WriteFile.WriteLine([Ô][Ô])
WriteFile.WriteLine([Ô]Description of Problem: [Ô] & descpro.Text)
WriteFile.WriteLine([Ô]=====================================[Ô])
WriteFile.WriteLine([Ô]Agreement: [Ô] & acordo.Text)
WriteFile.WriteLine([Ô][Ô])
WriteFile.WriteLine([Ô]Action Plan: [Ô] & TextBox8.Text)
WriteFile.WriteLine([Ô]=====================================[Ô])
WriteFile.WriteLine([Ô][Ô])
WriteFile.WriteLine([Ô]Actions Take: [Ô] & TextBox10.Text)
WriteFile.WriteLine([Ô]=====================================[Ô])
WriteFile.WriteLine([Ô][Ô])
WriteFile.WriteLine([Ô]CallBack:[Ô])
WriteFile.WriteLine([Ô]Day: [Ô] & MaskedTextBox2.Text)
WriteFile.WriteLine([Ô]Schedule: Of[Ô] & MaskedTextBox1.Text)
WriteFile.WriteLine([Ô]Schedule: The[Ô] & MaskedTextBox3.Text)
[ô] aqui, o arquivo é fechado
WriteFile.Close()
[ô] emite uma mensagem que o arquivo foi criado com sucesso
MessageBox.Show([Ô]Arquivo de LOG criado com sucesso[Ô], [Ô]Arquivo criado[Ô], MessageBoxButtons.OK, MessageBoxIcon.Information)
[ô] aqui, eu utilizei o Notepad para exibir o arquivo que foi criado.
Shell([Ô]Notepad.exe [Ô] & Application.StartupPath & [Ô]\log.txt[Ô])
End Sub


E quando eu compilo no inno setup e executo o programa já instalado ele da o erro anexado , e só quando eu executo como administrador o .exe ele não apresenta esse erro. Tem alguma forma de eu conseguir gerar esse log sem precisar ser como administrador ?


Obrigado
OCELOT 27/05/2014 10:11:43
#438525
Nunca se deve gravar nada na pasta do programa.

A pasta Arquivos de Programas, a raiz do disco C e qualquer pasta de sistema (Windows e Windows\System por exemplo), assim como as chaves do registro que não seja a HKEY_CURRENT_USER só podem ser gravadas por um administrador e devem ser evitadas para qualquer tipo de arquivo que precisa ser alterado.

O local correto para se gravar arquivos seria dentro da pasta de documentos do usuário, para o caso de arquivos em que ele pode querer acessar por outros programas, ou em uma pasta sua dentro do %appdata%
Faça seu login para responder