Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2013
    Messaggi
    14

    [VB.NET] Strano carattere in una stringa

    Ciao a tutti,
    ho un programma scritto in vb.net, ho la necessità di avviarlo all'avvio del pc. Dunque creo un file .bat che vado a copiare nella cartella di avvio automatico, questa è la sintassi del file .bat:
    codice:
    @echo off
    timeout 15 >nul 2>nul
    IF EXIST "%appdata%\Microsoft\Windows\Start Menu\Programs\Gestione Commesse 4.0\Gestione Commesse 4.0.appref-ms" ("%appdata%\Microsoft\Windows\Start Menu\Programs\Gestione Commesse 4.0\Gestione Commesse 4.0.appref-ms") ELSE (start /b "" cmd /c del "%~f0"&exit /b)
    Il tutto è perfettamente funzionante se il prompt dei comandi non mi rispondesse che "echo off" è un comando non riconosciuto, apparentemente sembra che ci sia un carattere "fantasma" davanti a tutta la stringa, come vedete nell'immagine. (se tolgo o metto la @ non cambia nulla, l'errore persiste).
    Immagine.jpg

    il codice vb con cui creo il file bat è questo:
    codice:
    Dim app_dir_generica As String = "%appdata%\Microsoft\Windows\Start Menu\Programs\Gestione Commesse 4.0\Gestione Commesse 4.0.appref-ms"            
    Dim startup_dir_generica As String = "%appdata%\Microsoft\Windows\Start Menu\Programs\Startup"
    Dim app_dir As String
    Dim startup_dir As String
    app_dir = Environment.ExpandEnvironmentVariables(app_dir_generica)
    startup_dir = Environment.ExpandEnvironmentVariables(startup_dir_generica)
    
    
    Dim bat As String = "@echo off" & vbCrLf & "timeout 15 >nul 2>nul" & vbCrLf & "IF EXIST " & Chr(34) & app_dir_generica & Chr(34) & " (" & Chr(34) & app_dir_generica & Chr(34) & ") ELSE (start /b " & Chr(34) & Chr(34) & " cmd /c del " & Chr(34) & "%~f0" & Chr(34) & "&exit /b)"
    
    
    My.Computer.FileSystem.WriteAllText(startup_dir & "\Gestione Commesse.bat", bat, False)

    Il codice del file bat funziona se eseguito riga per riga manualmente dalla console, ma se eseguo direttamente il .bat completo da quell'errore.
    Sapete aiutarmi?
    grazie
    Ultima modifica di pie_z91; 17-06-2015 a 08:52 Motivo: sistemato codice

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    prova così:

    My.Computer.FileSystem.WriteAllText(startup_dir & "\Gestione Commesse.bat", bat, False, Encoding.GetEncoding("iso-8859-1"))
    Pietro

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2013
    Messaggi
    14
    Grandissimo!! il carattere è sparito, immaginavo fosse un problema di codifica, ma non avevo assolutamente idea di come fare.
    Ti ringrazio.
    Il codice sistemato è il seguente:
    codice:
    My.Computer.FileSystem.WriteAllText(startup_dir & "\Gestione Commesse.bat", bat, False, System.Text.Encoding.GetEncoding("iso-8859-1"))

    Ancora una cosa, così facendo all'avvio rimane la schermata cmd con il cursore che lampeggia, c'è modo di non farla apparire? Credo sia dovuta dal timeout.


    Grazie ancora

  4. #4
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Pietro

  5. #5
    ... ma per avviare automaticamente non è affatto necessario ricorrere ad un file .bat!

    codice:
    Dim key As Object = Nothing
    
    key = My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run", Application.ProductName, Nothing)
    
    If key Is Nothing Then
        My.Computer.Registry.CurrentUser.OpenSubKey("SOFTWARE\Microsoft\Windows\CurrentVersion\Run", _
                   True).SetValue(Application.ProductName, Application.ExecutablePath)
    End If

    Per scrivere in "CurrentUser" non occorrono permessi di amministratore. Con una check box puoi decidere di cancellare il valore (Delete Value) o riscriverlo a piacere.
    Ultima modifica di eziogsv; 17-06-2015 a 14:11

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2013
    Messaggi
    14
    ma funziona con clickonce?

  7. #7
    Boh, non ho mai usato clickonce (per i miei setup uso InnoSetup), ma è comunissimo codice VB.net... perché non dovrebbe funzionare?

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2013
    Messaggi
    14
    Ad esempio, se disinstalli il programma penso che la chiave di registro rimanga e dia errore ad ogni avvio, quando avevo dovuto scegliere il metodo avevo letto questo. Farò delle prove.

  9. #9
    Quando fai pulizia del registro con CCleaner ne trova decine di riferimenti e percorsi mancanti... ma il registro funge lo stesso.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.