Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    32

    Button Che crea .exe con comandi?

    Ciao a tutti ragazzi sono nuovo del forum ^^ Mi piace porgrammare in vb.net e avrei un problema. Vorrei creare un form contenente un buttons, che a sua volta abbia la funzione di creare un file.exe, ma che abbia una funzione speciaficata da me sapete aiutarmi?
    Per Generare un file .exe da un button uso una savefiledialog, con questo codice :
    codice:
    Dim saveFileDialog1 As New SaveFileDialog()
            saveFileDialog1.FileName = "Nome Del File Da Scaricare.Estensione"
            saveFileDialog1.Filter = "Application file (*.exe)|*.exe|All files (*.*)|*.*"
            saveFileDialog1.FilterIndex = 2
            saveFileDialog1.RestoreDirectory = True
    
            If saveFileDialog1.ShowDialog() = DialogResult.OK Then
                myStream = saveFileDialog1.OpenFile()
                If (myStream IsNot Nothing) Then
    myStream.Close()
    
     End If
    End If
    Che funziona perfettamente, ma vorrei dare a quel file.exe che creo una specifica funzione. Aspetto risposte e grazie in anticipo

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,887
    E' una win application deduco. Ti sposto in programmazione.

  3. #3

    Moderazione

    Benvenuto sul forum! Ti ricordo che:
    • il codice va specificato tra tag [CODE] ... [/CODE], altrimenti perde l'indentazione;
    • il linguaggio di riferimento (e relativa versione) va sempre specificato (anche nel titolo, sotto forma di "tag").


    Ora correggo io, in futuro imposta correttamente la discussione fin da subito; nel frattempo ti consiglio di dare un'occhiata al regolamento.
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Venendo al tuo problema, devi usare la classe Microsoft.VisualBasic.VBCodeProvider; il codice da usare è sostanzialmente identico a quello riportato qui, solo che invece di chiamare CompileAssemblyFromFile (che serve appunto a compilare un file esistente) probabilmente devi usare CompileAssemblyFromSource (per generare l'eseguibile dal codice che gli passi direttamente).
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    32
    Ok grazie per le info e perdonatemi per gli errori, non li farò più, comunque ritornando al mio problema non è da tanto che programmo in Vb.net Quindi Ora seguendo le vostre risposte, ho importato:
    codice:
    Imports System.IO
    Imports System.CodeDom.Compiler
    Imports System.Globalization
    Poi ho riportato il seguente codice
    codice:
    Public Shared Function CompileExecutable(sourceName As String) As Boolean 
        Dim sourceFile As FileInfo = New FileInfo(sourceName)
        Dim provider As CodeDomProvider = Nothing 
        Dim compileOk As Boolean = False 
    
        ' Select the code provider based on the input file extension. 
        If sourceFile.Extension.ToUpper(CultureInfo.InvariantCulture) = ".CS"
    
            provider = CodeDomProvider.CreateProvider("CSharp")
    
        ElseIf sourceFile.Extension.ToUpper(CultureInfo.InvariantCulture) = ".VB"
    
            provider = CodeDomProvider.CreateProvider("VisualBasic")
    
        Else
            Console.WriteLine("Source file must have a .cs or .vb extension")
        End If 
    
        If Not provider Is Nothing 
    
            ' Format the executable file name. 
            ' Build the output assembly path using the current directory 
            ' and <source>_cs.exe or <source>_vb.exe. 
    
            Dim exeName As String = String.Format("{0}\{1}.exe", _
                System.Environment.CurrentDirectory, _
                sourceFile.Name.Replace(".", "_"))
    
            Dim cp As CompilerParameters = new CompilerParameters()
    
            ' Generate an executable instead of  
            ' a class library.
            cp.GenerateExecutable = True 
    
            ' Specify the assembly file name to generate.
            cp.OutputAssembly = exeName
    
            ' Save the assembly as a physical file.
            cp.GenerateInMemory = False 
    
            ' Set whether to treat all warnings as errors.
            cp.TreatWarningsAsErrors = False 
    
            ' Invoke compilation of the source file. 
            Dim cr As CompilerResults = provider.CompileAssemblyFromFile(cp, _
                sourceName)
    
            If cr.Errors.Count > 0
                ' Display compilation errors.
                Console.WriteLine("Errors building {0} into {1}", _
                    sourceName, cr.PathToAssembly)
    
                Dim ce As CompilerError
                For Each ce In cr.Errors
                    Console.WriteLine("  {0}", ce.ToString())
                    Console.WriteLine()
                Next ce
            Else 
                ' Display a successful compilation message.
                Console.WriteLine("Source {0} built into {1} successfully.", _
                    sourceName, cr.PathToAssembly)
            End If 
    
            ' Return the results of the compilation. 
            If cr.Errors.Count > 0
                compileOk = False 
            Else 
                compileOk = True 
            End If 
        End If
        return compileOk
    
    End Function
    E il form non mi riporta nessun errore, poi da quanto ho capito ho modificato questo :
    codice:
    Console.WriteLine("Source file must have a .cs or .vb extension")
    Inserendo tra le parentesi e le virgolette la directory dove si trovava il file .vb, ma ancora non ho capito come generare l'exe dopo aver riportato questo codice.

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    32
    Nessun Può aiutarmi?

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    32
    Volevo dire che ho impostato quel codice nella classe library per creare una .dll e importarla, ma potreste spiegarmi meglio ?

  8. #8
    Originariamente inviato da return
    Nessun Può aiutarmi?
    Hai letto quello che ho scritto sopra? Hai letto la documentazione di CompileAssemblyFromSource?
    Originariamente inviato da MItaly
    invece di chiamare CompileAssemblyFromFile (che serve appunto a compilare un file esistente) probabilmente devi usare CompileAssemblyFromSource (per generare l'eseguibile dal codice che gli passi direttamente).
    Volevo dire che ho impostato quel codice nella classe library per creare una .dll e importarla, ma potreste spiegarmi meglio ?
    Che c'entrano adesso le class libraries?
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2013
    Messaggi
    32
    MItaly Grazie per la risposta, comunque ho letto li, potete aiutarmi a capire meglio?

  10. #10
    Originariamente inviato da return
    MItaly Grazie per la risposta, comunque ho letto li, potete aiutarmi a capire meglio?
    Dovresti dirmi cosa non capisci... il codice dell'esempio genera un eseguibile a partire da un sorgente salvato su file (e per quello usa la CompileAssemblyFromFile), tu probabilmente dovrai generare il sorgente "al volo", per cui con ogni probabilità ti serve CompileAssemblyFromSource.
    Per il resto, il codice che ci devi passare dipende da quello che vuoi far fare all'eseguibile che vuoi generare; probabilmente ti conviene tenere un qualche template nelle risorse del tuo progetto, e modificarlo dove ti interessa farlo prima di passarlo alla CompileAssemblyFromSource.
    Amaro C++, il gusto pieno dell'undefined behavior.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.