PDA

Visualizza versione completa : [vb6] Disinstallazione & Update


Jamester
20-07-2009, 10.28.25
Sto provando in questo momento un codice per disinstallare un programma e scaricare nel caso ci sia una versione migliore. Allora il problema sarebbe questo: Se gli metto la mia cartella di installazione parte la disinstallazione pero' se tipo il programma viene installato altrove ho provato a scrivere come segue:

If MsgBox("Stai attualmente usando la versione " & strOldVer & " " & vbCrLf & "La nuova versione è " & sNewVersion & " " & vbCrLf & "Sei sicuro di volerlo aggiornare alla nuova versione?", vbQuestion + vbYesNo) = vbYes Then
Shell "C:\WINDOWS\unvise32.exe App.Path & "\uninstal.Log"
Scarica
Exit Sub
Else
Unload Me
End If


E mi da errore nella riga SHELL e nn ho capito perchè e come sarebbe "LA SINTASSI"

Inoltre perchè la sequenza di scaricamento parte in contemporanea a quella di disinstallazione? Vorrei che solo dopo aver portato a termine la sequenza di disinstallazione parta lo scaricamento via internet

Jamester
20-07-2009, 10.32.06
Altra domanda:

cn la riga di codice


.DownType = ReadForceUpdate = 0


Non dovrebbe ignorare il file scaricato dalla cache? perchè lo va a riprendere da non so dove dal mio pc o fa il resume del download? vorrei che partisse da capo se decido di interrompere il download.

Inoltre se disinstallo il programma prima del download, non credo lo possa fare se la sequenza di uninstall e' in corso o no? visto che in effetti l'uninstall e' un programma esterno forse puo' farlo ugualmente?

Jamester
20-07-2009, 12.44.28
Altra domanda:

cn la riga di codice



Non dovrebbe ignorare il file scaricato dalla cache? perchè lo va a riprendere da non so dove dal mio pc o fa il resume del download? vorrei che partisse da capo se decido di interrompere il download.

Inoltre se disinstallo il programma prima del download, non credo lo possa fare se la sequenza di uninstall e' in corso o no? visto che in effetti l'uninstall e' un programma esterno forse puo' farlo ugualmente?

k qui ho risolto c'era un altra chiamata

Jamester
20-07-2009, 13.15.57
Inoltre pare che in questa classe ci sia qualcosa di anomalo xche da qui dentro c'e' una sorta di msgbox che appare pare casualmente ogni volta che chiudo il programma o apro la form che richiama questo


VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
Persistable = 0 'NotPersistable
DataBindingBehavior = 0 'vbNone
DataSourceBehavior = 0 'vbNone
MTSTransactionMode = 0 'NotAnMTSObject
END
Attribute VB_Name = "clsINI"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Option Explicit
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
Private tINIFile As String 'The INI File Name

Public Property Get INIFile() As String
INIFile = tINIFile
End Property

Public Property Let INIFile(T As String)
tINIFile = T
End Property

'Write the setting to the file
Public Function WriteIni(ByVal Section As String, ByVal Key As String, ByVal Value As String, ByVal Filename As String) As Boolean
On Error Resume Next
Dim X As Long, Buff As String * 128, I As Integer
Buff = Value + Chr(0)
X = WritePrivateProfileString(Section, Key, Buff, Filename)
WriteIni = X
End Function

'Retrieve a string
Public Function ReadIni(ByVal Section As String, ByVal Key As String, ByVal Filename As String) As String
On Error Resume Next
Dim X As Long, Buff As String * 128, I As Integer
X = GetPrivateProfileString(Section, Key, "", Buff, 128, Filename)
I = InStr(Buff, Chr(0))
ReadIni = Trim(Left(Buff, I - 1))
End Function


dove accidenti sta sta specie di form che viene su ?

LoryOne
27-07-2009, 18.07.43
Inoltre perchè la sequenza di scaricamento parte in contemporanea a quella di disinstallazione? Vorrei che solo dopo aver portato a termine la sequenza di disinstallazione parta lo scaricamento via internet


Perchè Shell esegue un processo asincrono.
Tu devi lavorare sulla sincronizzazione dei processi.
Ti si aprono due strade:
1 - Enumerazione dei processi -> Il tuo software cicla fino a quando nella coda dei processi trova il nome del processo in esecuzione. Quando tutti i processi attivi non contengono il nome del processo, salti il loop e procedi (Semplice ma poco professionale)
2 - Utilizzo di pipes, mutex o semafori -> il tuo processo attende che un altro processo lo liberi dall'attesa. Si tratta di Inter-Process-Comunications

LoryOne
27-07-2009, 18.11.18
Shell "C:\WINDOWS\unvise32.exe App.Path & "\uninstal.Log"
Occhio ai doppi apici ed al simbolo '&' di congiunzione tra stringhe