Проект установки надстройки Excel 2010 с фабрикой установки

Я разрабатываю надстройку Excel. У меня есть серийные номера (например, 100 шт.), и я хочу проверить, когда надстройка Excel устанавливается на ПК. Но я не могу сделать это с проектом установки VS2010, потому что он не поддерживает хранение и проверку списка серийных номеров.

поэтому я хочу сделать это с помощью фабрики установки, и я сделал это по этой ссылке: ссылка

но у меня проблема с excel ; введите здесь описание изображения

если я выберу «Да», Excel будет работать для открытия .dll, если я выберу «Нет», он сделает что-нибудь.

введите здесь описание изображения

и мой заводской список установок, подобный этому. введите здесь описание изображения

и моя установочная фабрика «в сценарии после установки», мое значение Addinfilename равно «Posta Guvercini Excel AddIn For 2010.dll»

    -- Determine registry key (2 = HK CURRENT USER)
sVersions = Registry.GetKeyNames(2, "Software\\Microsoft\\Office");

-- Iterate through the registry keys per MS Office-version
--Next line has SetupFactory 8 code
--for iCount1, sVersion in sVersions do    
for iCount1, sVersion in pairs(sVersions) do    

    -- Try opening the registry key
    sSubKey = "Software\\Microsoft\\Office\\"..sVersion..
              "\\Excel\\Options\\"
    sValues = Registry.GetValueNames(2, sSubKey);

    --initialize index counter
    iIndex = -2
    if sValues then

        --Determine the index of the maximimum OPEN registry entry
        --Next line has SetupFactory 8 code
        --for iCount2, sValue in sValues do
        for iCount2, sValue in pairs(sValues) do

            if (String.Left(sValue, 4) == "OPEN") then            
                --Check whether the user did not already install
                --the same add-in to prevent errors when opening Excel
                sKeysValue = Registry.GetValue(2, sSubKey, sValue, true)  
                if String.Find(sKeysValue, SessionVar.Expand(
                              "%AddinFileName%"), 1, false) > 0 then
                    iIndex = -1
                    -- leave loop
                    break;
                else
                    if (sValue == "OPEN") then
                        iIndex = 0
                    else
                        iIndex = String.ToNumber(String.Mid(
                                 sValue, 5, String.Length(sValue)-4))
                    end;
                end;
            end;
        end;

        -- -1 means: This add-in is already installed; we're done
        if iIndex ~= -1 then        
            --Determine path based on variable "%AddinFileName%
            sAppPath = String.Char(34)..
                       SessionVar.Expand("%AppFolder%")..
                       "\\"..
                       SessionVar.Expand("%AddinFileName%")..
                       String.Char(34)

            -- -2 is the initialized value of the index counter
            if (iIndex == -2) then
                -- OPEN-key does not exist
                Registry.SetValue(2, sSubKey, "OPEN",
                                  sAppPath, REG_SZ)
            else
                Registry.SetValue(2, sSubKey, "OPEN"..(iIndex + 1),
                                  sAppPath, REG_SZ)
            end;
        end;
    end;
end;

person Savas Adar    schedule 15.05.2012    source источник


Ответы (2)


Похоже, вы создаете надстройку автоматизации.
Если это так, вам нужно добавить к имени надстройки префикс /A, чтобы сообщить Excel, что это надстройка автоматизации. в противном случае ожидается XLL, XLA или XLAM.

person Charles Williams    schedule 15.05.2012

я решаю эту проблему. При установке Excel мы должны использовать запись реестра.

result = Registry.SetValue( HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Office\\Excel\\Addins\\company" , "LoadBehavior" , "3" , REG_DWORD );
result = Registry.SetValue(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Office\\Excel\\Addins\\company" ,"FriendlyName", "program name", REG_SZ);
result = Registry.SetValue( HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Office\\Excel\\Addins\\company" , "Description" , "program name" , REG_SZ );
result = Registry.SetValue(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Office\\Excel\\Addins\\company" ,"Manifest", SessionVar.Expand("%AppFolder%\\myvtofile.vsto|vstolocal"), REG_SZ);

для запуска надстройки при запуске Excel.

Значение ключа LoadBehavior должно быть «3».

person Savas Adar    schedule 24.05.2012