Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2015, 10:46   #1
web_profiler
Новичок
Джуниор
 
Регистрация: 22.04.2015
Сообщений: 6
По умолчанию Создание exe-шника и пакета msi

Прошу прошения, у всех кто сочтет тему очень банальной и легкой в С++, но все же опишу свою проблемку.
Цель: создать msi расширение для ГуглХрома, которое попадает в расщирения браузера и регистрирует библиотеку.
Имеющиеся данные:
1. Внешняя компонента 1С ("AddInNative.dll")
2. Проект на С++ для создания exe-файла "AddInChr.exe", который как я понял должен зарегистрировать "AddInNative.dll"
3. Файл манифеста "manifest.json".
3. Проект Visual Studio для создания msi-пакета из "AddInChr.exe", "AddInNative.dll", "manifest.json".
4. Описание создания расширения с диска ИТС (1С).

AddInNative.dll - 100% рабочая.

Мои успехи: если в ГуглХроме на вкладке расширения в режиме разработчика "Загрузить распакованное решение", то оно загружается с предупреждениями, а вот при инсталяции msi-пакета в расширения не попадает.
Помогите, пожалуйста, мне разобраться.

Итак гайд, которым я пользовался

Внешние компоненты для Google Chrome

Создание адаптера для Google Chrome

Адаптер внешней компоненты для Chrome представляет консольное приложение. Адаптер, при установке, регистрирует в браузере одно или несколько уникальных имен расширений. Рекомендуется начинать имя расширения с «com.» и включать в него номер версии компоненты, например «com.YourCompanyName.YouExtensionNa me.1». В случае, если выпускается новая версия компоненты, номер версии в имени следует увеличить, в противном случае веб-клиент будет продолжать пользоваться старой версией компоненты.

Предположим, что в конфигурации используется компонента, у которой имя - «com.YourCompanyName.YouExtensionNa me.3». Разработчик компоненты выпускает новую версию компоненты. Для включения ее в конфигурацию нужно пересобрать адаптеры для Chrome, изменив в них имя на «com.YourCompanyName.YouExtensionNa me.4». Затем пересобрать установочные пакеты и включить их в архив, загружаемый в конфигурацию. Также, нужно изменить файл манифеста архива, изменив в нем имя на com.YourCompanyName.YouExtensionNam e.4. После чего загрузить архив в конфигурацию. Что происходит при запуске веб-клиента с новой конфигурацией на машине, на которой ранее была установлена предыдущая версия компоненты? Веб-клиент получает из конфигурации информацию о том, что имя компоненты - «com.YourCompanyName.YouExtensionNa me.4». Такое имя расширения в браузере не зарегистрировано, поэтому старая версия компоненты использована не будет. Чтобы начать использование компоненты пользователь должен выполнить ее установку. Старая версия компоненты при этом не удаляется и остается доступной для использования с более ранними конфигурациями.

За основу при создании расширения разработчик может взять проект AddInChrome из каталога example. В файле config.cpp нужно изменить значения переменных nameFilePrj, nameFileComponent. nameFilePrj должно содержать имя файла адаптера (например, AddInChrWin32.exe), nameFileComponent - имя файла внешней компоненты (например, AddInNative.dll).

Установочный пакет для Chrome для Windows создается в формате MSI.

В состав установочного пакета должны входить:

файл внешней компоненты
файл адаптера внешней компоненты
файл манифеста (в формате json)

Файл манифеста должен иметь вид:
{
"name": "com.YourCompanyName.YouExtensionNa me",
"description": "Description of extension for Chrome",
"path": "AddInChr.exe",
"type": "stdio",
"allowed_origins": [
"chrome-extension://pbhelknnhilelbnhfpcjlcabhmfangik/"
]
}

В файле манифеста следует изменить:

Наименование Описание

name Имя расширения
description Отображаемое описание компоненты
path Путь к файлу адаптера компоненты

Остальные атрибуты менять нельзя.

Во время установки пакет должен скопировать файлы на диск компьютера и зарегистрировать расширение как плагин браузера в системном реестре. В реестре нужно создать ветку HKCU\Software\Google\Chrome\NativeM essagingHosts\com.YourCompanyName.Y ouExtensionName (вместо YourCompanyName и YouExtensionName подставьте свои значения), в которой создать параметр по умолчанию строкового типа, который указывает полный путь к файлу манифеста. Содержимое атрибута 'name' манифеста должно совпадать с наименованием ветки реестра.

Пакет должен быть подписан цифровой подписью разработчика.

В папке example\AddInChromeSetup содержится проект Visual Studio, собирающий пакет MSI для примера компоненты. Для сборки проекта, должен быть установлен WiX Toolset. Для каждой компоненты, следует установить свои значения в файле AddInChromeSetup.wxi, а для каждой новой версии компоненты, изменять ProductCode.
web_profiler вне форума Ответить с цитированием
Старый 22.04.2015, 10:47   #2
web_profiler
Новичок
Джуниор
 
Регистрация: 22.04.2015
Сообщений: 6
По умолчанию

Мой файл манифеста
{
"manifest_version": 2,
"version": "1.0.0.1",
"name": "com.1c.enterprise.addin.exampl e",
"description": "1C:Enterprise AddIn Extension for Chrome",
"path": "AddInChr.exe",
"type": "stdio",
"allowed_origins": [
"chrome-extension://pbhelknnhilelbnhfpcjlcabhmfangik/"
]
}

config.cpp
#include "config.h"

AddInComponentType typeComponent = eAddInNative;
#ifdef WIN32
const char *nameFilePrj = "AddInChr.exe";
const char *nameFileComponent = "AddInNative.dll";
#endif

config.h
#pragma once
#include "addinlib.h"

extern const char *nameFilePrj;
extern const char *nameFileComponent;

resource.h
//{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by AddInChrome.rc

// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 101
#define _APS_NEXT_COMMAND_VALUE 40001
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif

AddInChrome.rc
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
#include "afxres.h"
#undef APSTUDIO_READONLY_SYMBOLS
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32

VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,1
PRODUCTVERSION 1,0,0,1
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x40004L
FILETYPE 0x2L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904e4"
BEGIN
VALUE "CompanyName", "1C"
VALUE "FileDescription", "AddInChr"
VALUE "FileVersion", "1, 0, 0, 1"
VALUE "InternalName", "AddInChr"
VALUE "LegalCopyright", "Copyright © 2014"
VALUE "OriginalFilename", "AddInChr.exe"
VALUE "ProductName", "1C Chrome External Component Sample"
VALUE "ProductVersion", "1, 0, 0, 1"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1252
END
END

#ifdef APSTUDIO_INVOKED
1 TEXTINCLUDE
BEGIN
"resource.h\0"
END

2 TEXTINCLUDE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END

3 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
#endif // English (U.S.) resources
#ifndef APSTUDIO_INVOKED
#endif // not APSTUDIO_INVOKED

addinlib.h
#pragma once
enum AddInComponentType
{
eAddInCom = 1,
eAddInNative,
eAddInJava,
eAddInvalid = -1
};

И повторюсь: при инсталяции msi-пакета не попадает в расширения ГуглХрома и не регистрирует, соответственно, dll-ку
ПОМОГИТЕ, ПЛИЗ!!!
web_profiler вне форума Ответить с цитированием
Старый 22.04.2015, 10:53   #3
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Так вы нам не программу показывайте а то, что вы делаете в MSI.
У инсталяторов тоже есть исходники - вот их и показывайте...
waleri вне форума Ответить с цитированием
Старый 22.04.2015, 10:58   #4
web_profiler
Новичок
Джуниор
 
Регистрация: 22.04.2015
Сообщений: 6
По умолчанию

2 секунды, сбрасываю
Хотя у меня такое чувство, что exe-шник тоже не работает, т.к. он же ведь должен dll-ку подгружать

product.wxs
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<?include AddInChromeSetup.wxi?>
<Product
Id="$(var.ProductCode)"
Codepage="1252"
Language="1033"
Manufacturer="$(var.Manufacturer)"
Name="$(var.ProductName)"
UpgradeCode="$(var.UpgradeCode)"
Version="$(var.ProductVersion)">

<Package
Description="$(var.Description)"
Comments="$(var.Description)"
InstallerVersion="300"
Languages="1033"
Keywords="Installer,MSI,Database"
InstallPrivileges="limited"
InstallScope="perUser"
Compressed="yes"
Manufacturer="$(var.Manufacturer)"
Platform="x86" />

<MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
<MediaTemplate EmbedCab="yes" />

<Feature Id="ProductFeature" Title="AddIn Example Chrome" Level="1">
<ComponentGroupRef Id="ProductComponents" />
</Feature>
<Property Id="ARPCONTACT" Value="$(var.Manufacturer)" />
<Property Id="ARPURLINFOABOUT" Value="$(var.CompanyURL)" />
<Property Id="ALLUSERS" Admin="no" Hidden="yes"/>
</Product>

<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="AppDataFolder">
<Directory Id="MyCompanyDir" Name="$(var.Manufacturer)">
<Directory Id="INSTALLFOLDER" Name="AddInChrome" />
</Directory>
</Directory>
</Directory>
</Fragment>

<Fragment>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<Component Guid="$(var.FileComponentsGuid)" Id="main" DisableRegistryReflection="yes" >
<File Id="binFile" Source="AddInChr.exe" />
<File Source="com.1c.enterprise.addin.exa mple.win.json" Id="json" Name="$(var.AddInName).json" />
<File Id="addin" Source="AddInNative.dll" />
<RemoveFolder Id="MyCompanyDir" Directory="MyCompanyDir" On="uninstall"/>
<RemoveFolder Id="inst" Directory="INSTALLFOLDER" On="uninstall"/>
<RegistryKey Id="reg" ForceCreateOnInstall="yes" Root="HKCU" Key="Software\Google\Chrome\NativeM essagingHosts">
<RegistryKey Key="$(var.AddInName)" ForceCreateOnInstall="yes">
<RegistryValue KeyPath="yes" Type="string" Value="[INSTALLFOLDER]$(var.AddInName).json" />
</RegistryKey>
</RegistryKey>
</Component>
</ComponentGroup>
</Fragment>
</Wix>
web_profiler вне форума Ответить с цитированием
Старый 22.04.2015, 10:58   #5
web_profiler
Новичок
Джуниор
 
Регистрация: 22.04.2015
Сообщений: 6
По умолчанию

AddInChromeSetup.wxi
<?xml version="1.0" encoding="utf-8"?>
<Include>
<?define ProductName="AddIn example for Chrome" ?>
<?define ProductVersion="1.0.0.1" ?>
<?define ProductCode="b7bc7c6f-9a4e-4973-be84-eca8e3427c97"?>
<?define UpgradeCode="06a81104-1e30-463d-87e1-e8a79b4c682a"?>
<?define Manufacturer="MyCompany"?>
<?define CompanyURL="www.MyCompany.com"?>
<?define Description="Setup AddIn example for Chrome"?>
<?define AddInName="com.1c.enterprise.addin. example"?>
<?define FileComponentsGuid="{34316F5C-5C1F-73EC-AE5C-4BB5ED46E294}"?>
</Include>

AddInChromeSetup.wixproj
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>3.6</ProductVersion>
<ProjectGuid>{f7b113ab-fd62-409a-863d-80fb937bd69b}</ProjectGuid>
<SchemaVersion>2.0</SchemaVersion>
<OutputName>AddInChromeSetup</OutputName>
<OutputType>Package</OutputType>
<WixTargetsPath Condition=" '$(WixTargetsPath)' == '' AND '$(MSBuildExtensionsPath32)' != '' ">$(MSBuildExtensionsPath32)\Micros oft\WiX\v3.x\Wix.targets</WixTargetsPath>
web_profiler вне форума Ответить с цитированием
Старый 22.04.2015, 10:58   #6
web_profiler
Новичок
Джуниор
 
Регистрация: 22.04.2015
Сообщений: 6
По умолчанию

<WixTargetsPath Condition=" '$(WixTargetsPath)' == '' ">$(MSBuildExtensionsPath)\Microsof t\WiX\v3.x\Wix.targets</WixTargetsPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<OutputPath>$(SolutionDir)\bin\</OutputPath>
<IntermediateOutputPath>obj\$(Confi guration)\</IntermediateOutputPath>
<DefineConstants>Debug</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<OutputPath>$(SolutionDir)\bin\</OutputPath>
<IntermediateOutputPath>obj\$(Confi guration)\</IntermediateOutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
<DefineConstants>Debug</DefineConstants>
<OutputPath>bin\$(Platform)\$(Confi guration)\</OutputPath>
<IntermediateOutputPath>obj\$(Platf orm)\$(Configuration)\</IntermediateOutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
<OutputPath>bin\$(Platform)\$(Confi guration)\</OutputPath>
<IntermediateOutputPath>obj\$(Platf orm)\$(Configuration)\</IntermediateOutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
<DefineConstants>Debug</DefineConstants>
<OutputPath>bin\$(Platform)\$(Confi guration)\</OutputPath>
<IntermediateOutputPath>obj\$(Platf orm)\$(Configuration)\</IntermediateOutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
<OutputPath>bin\$(Platform)\$(Confi guration)\</OutputPath>
<IntermediateOutputPath>obj\$(Platf orm)\$(Configuration)\</IntermediateOutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
<DefineConstants>Debug</DefineConstants>
<OutputPath>bin\$(Platform)\$(Confi guration)\</OutputPath>
<IntermediateOutputPath>obj\$(Platf orm)\$(Configuration)\</IntermediateOutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
<OutputPath>bin\$(Platform)\$(Confi guration)\</OutputPath>
<IntermediateOutputPath>obj\$(Platf orm)\$(Configuration)\</IntermediateOutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|ia64' ">
<DefineConstants>Debug</DefineConstants>
<OutputPath>bin\$(Platform)\$(Confi guration)\</OutputPath>
<IntermediateOutputPath>obj\$(Platf orm)\$(Configuration)\</IntermediateOutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|ia64' ">
<OutputPath>bin\$(Platform)\$(Confi guration)\</OutputPath>
<IntermediateOutputPath>obj\$(Platf orm)\$(Configuration)\</IntermediateOutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x64' ">
<DefineConstants>Debug</DefineConstants>
<OutputPath>bin\$(Platform)\$(Confi guration)\</OutputPath>
<IntermediateOutputPath>obj\$(Platf orm)\$(Configuration)\</IntermediateOutputPath>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
<OutputPath>bin\$(Platform)\$(Confi guration)\</OutputPath>
<IntermediateOutputPath>obj\$(Platf orm)\$(Configuration)\</IntermediateOutputPath>
</PropertyGroup>
<ItemGroup>
<Compile Include="Product.wxs" />
</ItemGroup>
<ItemGroup>
<Content Include="AddInChromeSetup.wxi" />
</ItemGroup>
<Import Project="$(WixTargetsPath)" />
<!--
To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Wix.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
web_profiler вне форума Ответить с цитированием
Старый 22.04.2015, 10:59   #7
web_profiler
Новичок
Джуниор
 
Регистрация: 22.04.2015
Сообщений: 6
По умолчанию

Простите пожалуйста, если чего-то лишнее сбросил. Не силен в VS и С
web_profiler вне форума Ответить с цитированием
Старый 25.02.2019, 19:39   #8
Lycenko_Ju
Новичок
Джуниор
 
Регистрация: 25.02.2019
Сообщений: 1
По умолчанию

Добрый день. Столкнулся с такой же проблемой. У Вас то нибудь получилось?
Lycenko_Ju вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Установка Msi пакета РагнаР C# (си шарп) 0 10.10.2012 21:05
Запрет скачивать файлы по маске (*.exe,*.msi,*.mp3) Noor Софт 10 16.05.2012 10:55
Запуск программы из EXE-шника EPaul Общие вопросы Delphi 3 29.08.2011 12:30
Защита EXE-шника Bat{CMD}_Men Общие вопросы Delphi 9 14.09.2009 15:21
Два неубиваемых exe'шника Veiron Общие вопросы Delphi 9 22.05.2009 18:29