Domanda

Una soluzione alternativa per il regasmo chiamante senza i diritti di amministrazione è stato già descritto qui:

commorsi commore senza regasm

Sto cercando di creare una libreria COM che i miei utenti possono implementare e utilizzare da Excel VBA senza i privilegi di amministrazione. Mi è piaciuto la regasm workaround, dal momento che sembra che le persone non abbiano molto successo con l'utilizzo di oggetti COM gratuiti di registrazione da Excel VBA. Voglio anche vincolarsi anticipati in modo che i miei utenti possano beneficiare del completamento della sintassi.

La risposta accettata nella domanda sopra menzionata, tuttavia, non descrive dove mettere la DLL del montaggio sul computer dell'utente. I diritti di amministrazione sono necessari per installare l'assemblaggio nel GAC, quindi mi chiedo dove si può mettere il file DLL. Presumo che la dir dell'applicazione venga cercata per qualsiasi DLL di riferimento, ma non riesco a mettere la mia DLL nella DIR di Excel senza di nuovo i diritti di amministrazione. È possibile utilizzare la soluzione alternativa con il client Excel? C'è qualche altro modo per chiamare gli oggetti COM da VBA senza la necessità dei privilegi di amministrazione per distribuirli prima?

È stato utile?

Soluzione

.

Regasmo chiamante senza diritti amministrativi per COM Interop

Penso che dovrebbe essere possibile utilizzare RegistrationServices.RegisterAssembly e RegOverridePredefKey API insieme per implementare la registrazione automatica sotto l'alveare HKCU, in modo omaggio.Ho pubblicato una risposta più dettagliata qui .

Altri suggerimenti

Sì, ora hai due problemi, non puoi metterlo da nessuna parte dovrebbe metterlo, come la sottodirectory di file GAC o A C: \ Program. Dal momento che quelle posizioni richiedono anche un'elevazione UAC. Probabilmente hai anche dimenticato di eseguire regasm.exe con l'opzione / codebase, richiesta per dire al CLR dove cercare il file.

L'utente deve avere dei privilegi sufficienti per copiare la DLL in una directory con cui ha scritto l'accesso. Questa è normalmente solo una directory in C: \ Users \ Username, come la sottodirectory AppData. Il mal di testa dovrai affrontare che il file .reg deve essere adattato per ogni singolo utente dal momento che il suo nome utente è diverso. Quindi il valore CodeBase nel file .reg deve essere modificato per ciascun utente. Questa scale male, per metterla leggermente.

La risposta che hai trovato non è molto buono. L'unica soluzione che veramente funziona è scrivere la tua funzione di registrazione. Uno che scrive le chiavi del registro in HKCU invece di HKLM. Utilizza il [ Attributo ComRegisterfunction] . Sai dal file .reg quali tasti devi scrivere. E usi Assembly.getExecutingingassembly (). Posizione per capire cosa scrivere per il valore del registro di baseBase. Non dimenticare la [Comunregisterfunction].

Tieni presente che, almeno nello spirito, stai cercando di navigare intorno alle restrizioni che l'amministratore LAN imposto su questi utenti. Si preoccupano molto del sapere che tipo di codice corre sulle macchine che supportano. Questo potrebbe metterti nei guai, almeno parlare con il ragazzo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top