Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [VB6]Problema installazione componenti .ocx

    Come da titolo ho la necessità di installare i componenti ocx per la mia applicazione. Mi spiego meglio. Se nel computer dove c'è la mia applicazione; non sono installati i componenti .ocx, l'applicazione non va. Ho scritto questo codice:



    codice:
    Dim a() As Byte
    Dim b As Long
    a = LoadResData(101, "CUSTOM")
    b = FreeFile
    Dim cartella64 As String
    Dim file64 As String
    Dim file32 As String
    cartella64 = Dir("C:\Windows\SysWOW64", vbDirectory)
    file64 = Dir("C:\Windows\SysWOW64\nome.OCX")
    file32 = Dir("C:\Windows\System32\nome.OCX")
    If cartella64 <> "" Then
    
    If Not file64 <> "" Then
    Open "C:\Windows\SysWOW64\nome.OCX" For Binary Access Write As #b
    Put #b, , a
    Close #b
    DoEvents
    Shell ("regsvr32 C:\Windows\SysWOW64\nome.OCX"), vbHide
    End If
    Else
    
    If Not file32 <> "" Then
    Open "C:\Windows\System32\nome.OCX" For Binary Access Write As #b
    Put #b, , a
    Close #b
    DoEvents
    Shell ("regsvr32 nome.OCX"), vbHide
    End If
    End If
    Il problema è che se apro l'applicazione in un computer senza privilegi di amministrazione mi da run time error 75 Path error. Ma se gli do i privilegi installa il .ocx. Come posso dare i privilegi di amministrazione da codice?

  2. #2
    Come faccio a dare i permessi di amministratore da codice, all'applicazione?

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    758
    Ma perché vuoi avventurarti in una palude piena di insidie come è quella delle installazioni quando esistono dei prodotti ottimi e gratuiti che svolgono questo ingrato lavoro?
    Un' installazione con il metodo che proponi (ammesso che possa funzionare) è del tutto scorretta per una lunga serie di motivi che, se sei interessato, possiamo anche descrivere nel dettaglio.

    Ti consiglio invece di spendere un po' di tempo per imparare ad utilizzare qualche tool specifico; per esempio InnoSetup o CyberInstaller.

  4. #4
    Vorrei sapere se è possibile riuscire a dare i privilegi da codice. E poi valutare.

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,463
    Originariamente inviato da Cobrettis
    Vorrei sapere se è possibile riuscire a dare i privilegi da codice.
    Bastava una ricerca: vedi qui.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da Cobrettis
    Vorrei sapere se è possibile riuscire a dare i privilegi da codice. E poi valutare.
    Assolutamente sbagliato, per molti motivi, due tra i più semplici sono:

    1) non si ha mai la certezza che funzioni, perchè è necessario che l'utente sia Amministratore, e se non lo è deve avviare con RunAs e sono in ogni caso richieste le credenziali dell'amministratore.
    E se l'utente NON è l'Amministratore, o non dispone di certi permessi (ad esempio NON può installare, non ha accesso a certe chiavi del Registro di Windows, ecc.) allora c'è un motivo per cui gli sono stati inibiti determinati permessi, quindi non potrà mai installare la tua applicazione. Solo l'Amministratore può farlo.
    Non lo si può fare nemmeno con un Setup, figurati se si può farlo 'a mano' (o da codice).

    2) I componenti ActiveX vanno registrati seguendo regole specifiche, che non si riducono certo ad un semplice uso di regsvr32!

    Tra queste regole c'è anche il controllo di versione del componente, da cui non si può prescindere in nessun modo, a meno che...
    Tu vuoi rischiare di compromettere il PC del cliente?

    Se tutti installassero componenti come vuoi fare tu, diverrebbe 'normale' avere programmi che da un giorno all'altro non funzionano più perchè chi ha installato il proprio programma 'a mano' (non seguendo le Regole di Windows) ha compromesso altre applicazioni sovrascrivendo i componenti esistenti (più recenti) con i loro (più vecchi).

    Tu cosa penseresti se dopo aver installato una nuova applicazione sul tuo pc, un'altra tua applicazione non funzionasse più? Saresti contento?
    A me è capitato, e mi sono inc.... come una bestia con l'autore (se così possiamo definirlo) del programma!
    Da allora installo nuovi programmi SOLO su macchine virtuali per verificare che tutto sia in ordine.

    Nota che la stessa cosa può accadere quando si rimuove un'applicazione perchè, se questa è stata installata 'a mano' può solo essere rimossa 'a mano' (non serve ripetere quanto sopra).

    E questo non è tutto! Ma non voglio allarmarti oltre.

    Per fortuna esistono gli installer!
    E dato che esistono... usiamoli sti benedetti installer!
    Certo, bisogna anche imparare ad usarli, e conoscere le 'regole del gioco' ma almeno dietro ad un installer (ad es. uno dei migliori freeware come www.innosetup.com) si trova supporto ed informazioni che ti aiutano ad imparare e capire come si deve fare.

    Perchè oggi come oggi, creare un setup di installazione 'come si deve' non è per ninete banale, anzi!

    IMVHO of course.


  7. #7
    Avete ragione. Mi vado a complicare la vita, utilizzerò l'installatore che mi ha consigliato Gibra. Vi ringrazio .

  8. #8
    Però mi sorge un dubbio. Se l'ocx lo devo installare o nella System32 o in SysWOW64, a seconda del computer. Come faccio con "l'installatore"?.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    758
    Originariamente inviato da Cobrettis
    Però mi sorge un dubbio. Se l'ocx lo devo installare o nella System32 o in SysWOW64, a seconda del computer. Come faccio con "l'installatore"?.
    Ecco un altro ottimo motivo per usare un installer! InnoSetup (per restare su di esso) permette di usare delle costanti predefinite che, a seconda del sistema operativo su cui si sta installando, vengono tradotte nel modo giusto. Esempio tratto dall' help di InnoSetup:


    {sys}
    The system's System32 directory (System on Windows 95/98/Me).
    For example: If you used {sys}\CTL3D32.DLL on an entry and the system's Windows System directory is "C:\WINDOWS\SYSTEM", Setup or Uninstall will translate it to "C:\WINDOWS\SYSTEM\CTL3D32.DLL".

    On 64-bit Windows, by default, the System32 path returned by this constant maps to the directory containing 32-bit system files, just like on 32-bit Windows. (This can be overridden by enabling 64-bit mode.)

    {syswow64}
    On 64-bit Windows, the system's SysWOW64 directory, typically "C:\WINDOWS\SysWOW64". This is the actual directory in which 32-bit system files reside. On 32-bit Windows, 32-bit system files reside in "System32" or "System", not in a separate SysWOW64 directory, so this constant will resolve to the same directory as {sys} if used there.

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.