2015-05-06 19 views
6

Ho creato un progetto di test in VS 2012 file diDistribuzione di Excel Add-In utilizzando NSIS - problema del Registro di sistema

-> Nuovo -> Progetto -> Altre lingue -> Visual C# -> Ufficio -> 2010

che costruisce bene. Vorrei distribuire questo sulle macchine client, guardando sul sito MSDN ho 2 opzioni, ClickOnce o InstallShield

https://msdn.microsoft.com/en-us/library/bb386179(v=vs.110).aspx

non posso usare ClickOnce, e mi è stato chiesto di non usare installshield ma NSIS . Ho fatto progressi con NSIS ma non riesce a registrare la DLL. Se provo a registrarlo manualmente utilizzando Regsvr32, visualizzerò un messaggio di errore

"Il modulo" [filepath] TestAddin.dll "è stato caricato ma il server DLLRegisterServer non è stato trovato." [Percorso file] TestAddin.dll" è un file DLL o OCX valido e riprovare.

ecco come lo provo e registrare all'interno dello script NSIS, preso da una vecchia pagina del forum che io non capisco pienamente.

Exec 'regsvr32.exe /s "$INSTDIR\MyExcelAddin.dll"' 

    WriteRegStr HKLM "Software\Microsoft\Office\Excel\Addins\MyExcelAddin.Connect" "FriendlyName" "MyExcelAddin" 
    WriteRegStr HKLM "Software\Microsoft\Office\Excel\Addins\MyExcelAddin.Connect" "Description" "MyExcelAddin" 
    WriteRegDWORD HKLM "Software\Microsoft\Office\Excel\Addins\MyExcelAddin.Connect" "LoadBehavior" "00000003" 
    WriteRegDWORD HKLM "Software\Microsoft\Office\Excel\Addins\MyExcelAddin.Connect" "CommandLineSafe" "00000000" 

Aggiornamento: ora posso creare voci di registro come segue ma il componente aggiuntivo non verrà ancora visualizzato in excel

SetRegView 64 
    Exec '"%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe" "$INSTDIR\MyExcelAddin.dll"' 

    WriteRegStr HKLM "Software\Microsoft\Office\Excel\Addins\MyExcelAddin" "FriendlyName" "MyExcelAddin" 
    WriteRegStr HKLM "Software\Microsoft\Office\Excel\Addins\MyExcelAddin" "Description" "MyExcelAddin" 
    WriteRegStr HKLM "Software\Microsoft\Office\Excel\Addins\MyExcelAddin" "Manifest" "Manifest file:///$INSTDIR\MyExcelAddin.vsto|vstolocal" 
    WriteRegDWORD HKLM "Software\Microsoft\Office\Excel\Addins\MyExcelAddin" "LoadBehavior" "00000003" 
    WriteRegDWORD HKLM "Software\Microsoft\Office\Excel\Addins\MyExcelAddin" "CommandLineSafe" "00000000" 

aggiornamento 2: questo in realtà ha funzionato alla fine, avevo fatto altre cose nell'ordine sbagliato nello script NSIS. Non avevo copiato il file .dll nella cartella che stavo tentando di registrare utilizzando Regasm.exe

+0

DLLRegisterServer è la normale esportazione di funzione del punto di ingresso per la registrazione, se il tuo addin non lo esporta quindi solo tu sapresti come registrarlo ... – Anders

+0

Installshield e visual studio possono entrambi registrare la DLL senza DLLRegisterServer implementato, sicuramente devono usare la riga di comando per farlo. –

+0

Non so se questo sarebbe un problema, ma per i miei plugin Excel, il valore "Manifest" è solo "file: ///$INSTDIR/MyExcelAddin.vsto | vstolocal" invece di avere "Manifest" sul fronte . –

risposta

0

Nel caso in cui si stia utilizzando un'installazione a 64 bit di Office e si sia certi che sia appropriato per l'installazione per "tutti gli utenti" ", i percorsi di registro avrebbe bisogno di essere regolata come segue:

WriteRegStr HKLM "Software\Wow6432Node\Microsoft\Office\Excel\Addins\MyExcelAddin" "FriendlyName" "MyExcelAddin" 
WriteRegStr HKLM "Software\Wow6432Node\Microsoft\Office\Excel\Addins\MyExcelAddin" "Description" "MyExcelAddin" 
WriteRegStr HKLM "Software\Wow6432Node\Microsoft\Office\Excel\Addins\MyExcelAddin" "Manifest" "Manifest file:///$INSTDIR\MyExcelAddin.vsto|vstolocal" 
WriteRegDWORD HKLM "Software\Wow6432Node\Microsoft\Office\Excel\Addins\MyExcelAddin" "LoadBehavior" "00000003" 
WriteRegDWORD HKLM "Software\Wow6432Node\Microsoft\Office\Excel\Addins\MyExcelAddin" "CommandLineSafe" "00000000" 

in caso contrario, si potrebbe avere più fortuna di installare il componente aggiuntivo per il 'utente corrente', nel qual caso avresti bisogno di regolare nel modo seguente :

WriteRegStr HKCU "Software\Microsoft\Office\Excel\Addins\MyExcelAddin" "FriendlyName" "MyExcelAddin" 
WriteRegStr HKCU "Software\Microsoft\Office\Excel\Addins\MyExcelAddin" "Description" "MyExcelAddin" 
WriteRegStr HKCU "Software\Microsoft\Office\Excel\Addins\MyExcelAddin" "Manifest" "Manifest file:///$INSTDIR\MyExcelAddin.vsto|vstolocal" 
WriteRegDWORD HKCU "Software\Microsoft\Office\Excel\Addins\MyExcelAddin" "LoadBehavior" "00000003" 
WriteRegDWORD HKCU "Software\Microsoft\Office\Excel\Addins\MyExcelAddin" "CommandLineSafe" "00000000" 
+0

anche se si sta installando per 32 bit excel e si è su una macchina a 64 bit, la scrittura delle chiavi di registro andrà automaticamente a Software \ Wow6432Node \ Microsoft, utilizzando SetRegView 64 le imposterà su Software \ Microsoft. –

+1

Ah, questo semplifica le cose in modo tale che non dovrai preoccuparti di ramificare lo script sull'installazione rilevata. Tuttavia, tutti i miei add-on si trovano sotto HKCU e Microsoft dice che HKLM può essere utilizzato solo in "determinati scenari", qualunque cosa significhi: https://msdn.microsoft.com/en-us/library/bb386106(v = vs.110) aspx – mysteryegg

Problemi correlati