Salve a tutti!
Giorni fa ho cominciato a scrivere un programma da "distribuire" ai miei utenti, con funzione di registrazione/login. Portando avanti il progetto, sono stato costretto a realizzare un installer che un installer non è: ho sfruttato tutte le classi che avrei potuto usare per creare e scrivere i file. Il problema sta in una fase dell'installazione... comincio da principio:
- Creo tre file .phx (mia estensione, letta come .txt), e scrivo su uno di essi. "logged.phx" per far sì che il programma possa capire se il login è stato fatto o meno, "user.phx" contenente i dati inseriti alla registrazione, "lpath.phx" contenete la "directory di lavoro" del programma. Scrivo solo sull'ultimo dei tre...
codice:
Imports System.IO.File
Dim name1 As String = "logged.phx"
Dim name2 As String = "user.phx"
Dim name3 As String = "lpath.phx"
'Scrivo la parte di codice interessata
TextBox1.Text = TextBox1.Text & vbCrLf & "Creo file: " & name1
Create(name1)
TextBox1.Text = TextBox1.Text & vbCrLf & "Creo file: " & name2
Create(name2)
TextBox1.Text = TextBox1.Text & vbCrLf & "Creo file: " & name3
Create(name3)
Dim writer As New IO.StreamWriter("lpath.phx")
writer.Write(Environment.CurrentDirectory)
writer.Close()
Ok, il codice dà errore in questa riga:
codice:
Dim writer As New IO.StreamWriter("lpath.phx")
"File già in uso da un altro processo."
Da quale processo può mai essere usato? Non ci sono altri StreamWriter, quindi il rischio che ve ne sia uno già aperto non c'è. Allego anche il codice per intero, magari il problema sta altrove...
codice:
Imports System.IO.File
Public Class Form2
Dim time As Integer = 10 'Variabile per un countdown
Dim time2 As Integer = 1 'Vedi il commento su
Dim name1 As String = "logged.phx"
Dim name2 As String = "user.phx"
Dim name3 As String = "lpath.phx"
Dim path As String
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
time = time - 1
Label2.Text = time
If time = 0 Then
Label2.Text = ""
Label1.Text = "Installazione avviata."
Timer1.Stop()
'Uso il timer per fare l'installazione...
If Form1.TextBox1.Text = "C:\Users\" & Environment.UserName & "\COD_Wii_Clans" Then
TextBox1.Text = TextBox1.Text & vbCrLf & "Imposto cartella di lavoro: " & "C:\Users\" & Environment.UserName
Environment.CurrentDirectory = "C:\Users\" & Environment.UserName
End If
TextBox1.Text = TextBox1.Text & vbCrLf & "Imposto cartella di lavoro: " & Form1.TextBox1.Text
Environment.CurrentDirectory = Form1.TextBox1.Text
TextBox1.Text = TextBox1.Text & vbCrLf & "Creo directory: " & Form1.TextBox1.Text
MkDir(Form1.TextBox1.Text & "\COD_Wii_Clans")
Environment.CurrentDirectory = Form1.TextBox1.Text & "\COD_Wii_Clans"
path = Form1.TextBox1.Text & "\COD_Wii_Clans"
TextBox1.Text = TextBox1.Text & vbCrLf & "Creo file: " & name1
Create(name1)
TextBox1.Text = TextBox1.Text & vbCrLf & "Creo file: " & name2
Create(name2)
TextBox1.Text = TextBox1.Text & vbCrLf & "Creo file: " & name3
Create(name3)
FileClose() 'Tento di chiudere tutti i processi in modo bruto, niente da fare.
TextBox1.Text = TextBox1.Text & vbCrLf & "Definisco files precedentemente creati..."
TextBox1.Text = TextBox1.Text & vbCrLf & "Scarico eseguibile e librerie correlate..."
Timer2.Start()
Reset() 'Tento di chiudere tutti i processi in modo bruto, niente da fare.
End If
End Sub
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Timer1.Start()
End Sub
Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
time2 = time2 - 1
If time2 = 0 Then
Timer2.Stop()
Reset() 'Tento di chiudere tutti i processi in modo bruto, niente da fare.
Dim writer As New IO.StreamWriter("lpath.phx")
writer.Write(Environment.CurrentDirectory)
writer.Close()
My.Computer.Network.DownloadFile("http://phoenixstyle.altervista.org/Call_of_Duty_Wii_Clan/COD_Wii_Clans.exe", path & "\COD_Wii_Clans1.0a2.exe")
End If
End Sub
End Class
Suggerimenti? Grazie anticipatamente per eventuali risposte!