2015-05-06 22 views
6

我在VS中創建一個測試項目2012部署Excel插件使用NSIS - 註冊表問題

文件 - >新建 - >項目 - >其他語言 - >的Visual C# - >辦公 - > 2010

它的建立很好。我想在客戶機上部署此,期待在MSDN網站上我有2個選項,ClickOnce的或InstallShield

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

我不能使用ClickOnce的,我一直要求不要使用InstallShield但NSIS 。我已經與NSIS取得了進展,但未能註冊該DLL。如果我嘗試使用Regsvr32手動註冊它,我將收到一條錯誤消息

「模塊」[filepath] TestAddin.dll「已加載,但沒有找到入口點DLLRegisterServer,請確保」[filepath] TestAddin.dll」是一個有效的DLL或OCX文件,然後再試一次。

這裏是如何我嘗試和NSIS腳本中註冊,從舊的論壇頁面取我不完全理解。

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" 

更新:我現在可以創建註冊表項,執行以下操作,但該加載項仍不會在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" 

更新2:這實際上工作最終,我在NSIS腳本中以錯誤的順序做了其他事情。我沒有複製.dll文件到我試圖註冊該文件夾使用Regasm.exe

+0

DLLRegisterServer是用於註冊的常規入口點函數導出,如果你的插件不會導出它,那麼只有你會知道如何註冊它... – Anders

+0

Installshield和Visual Studio都可以在沒有實現DLLRegisterServer的情況下注冊該DLL,當然它們必須使用命令行來實現。 –

+0

不知道這是否會是一個問題,但我的Excel插件,該「清單」的值就是「文件:///$INSTDIR/MyExcelAddin.vsto | vstolocal」,而不是讓「清單」上的前。 –

回答

0

如果您使用的是64位的Office的安裝,並相信這是適當的安裝用於「所有用戶」你的註冊表路徑將需要調整如下:

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" 

否則,你可能有更好的運氣安裝加載項‘當前用戶’,在這種情況下,你需要調整如下:

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

即使您安裝了32位出類拔萃,是一個64位的機器上,寫註冊表項將自動轉到SOFTWARE \ Wow6432Node \微軟,使用SetRegView 64將它們設置爲軟件\微軟。 –

+1

嗯,這簡化了一些事情,這樣你就不用擔心分支檢測到的安裝腳本。然而,我所有的附加軟件位於HKCU下,並且微軟表示HKLM只能用於「某些場景」,無論如何:https://msdn.microsoft.com/en-us/library/bb386106(v = vs.110)的.aspx – mysteryegg