76

Re: WSH: Использование COM-сервера без его регистрации в системе

Через форму я не могу вам файлы послать. Пустое сообщение просто отправьте.

В реестре раздел с именем CLSID библиотеки типов появляется, версия там указана 2.1. Но вставка этого всего в манифест вроде бы ничего не даёт, действительно. Не знаю пока, в чём тут дело может быть.

77

Re: WSH: Использование COM-сервера без его регистрации в системе

Вообще я уже это сделал. Вы можете послать ссылку с файлообменника.

А у typelib какая версия?

78

Re: WSH: Использование COM-сервера без его регистрации в системе

А зачем ссылка? Я сами файлы вам отправил.

Нашёл ошибку. Вот в этой строке:

<assemblyIdentity type="win32" name="dsofile.sxs1" version=" 2.1.0.0" />

уберите пробел перед 2.1.0.0. После этого работает без указания TypeLib.

Помогло вот это

Дополнительные сведения содержатся в журнале событий приложений

79

Re: WSH: Использование COM-сервера без его регистрации в системе

Вот спасибо! Сам бы не увидел.
А откуда сообщение?

80

Re: WSH: Использование COM-сервера без его регистрации в системе

Ну так это часть сообщения об ошибке из поста №65. Посмотрел в "Журналы Windows\Приложение" и нашёл подробности.

Ошибка создания контекста архивации для "...\wscript.exe.Manifest". Ошибка в файле манифеста или политики "...\dsofile.sxs2.MANIFEST" в строке 3. Значение " 2.1.0.0" атрибута "version" в элементе "assemblyIdentity" недопустимо.

Думаю, имеется в виду всё-таки контекст аКТивации, а не архивации.

81

Re: WSH: Использование COM-сервера без его регистрации в системе

Странно, сам посмотрел на него сперва, а нужное не поймал.)
Да, журнал посмотрел, буду использовать, спасибо за подсказку.
Теперь надо бы с exe-компонентами (типа JSMail, TCWSHelp и т.п.) разобраться. Можно с ними это проворачивать или нет. До этого пока не получалось.
И ещё интересно как будут себя вести триал-версии.

82

Re: WSH: Использование COM-сервера без его регистрации в системе

Для exe я примеров не видел, не знаю. В этой статье на msdn, Registration-Free Activation of COM Components: A Walkthrough, тоже примеры с dll.

Там, кстати, объяснено, почему имя сборки должно отличаться от имени dll. Это связано с особенностями поиска сборок на Windows XP. Если сборку назвать WshExtra, то сначала ищется WshExtra.dll и проверяется, есть ли в ней встроенный манифест. Если его нет, то поиск, как ни странно, не идёт дальше, а прекращается. Так что до WshExtra.manifest он просто не дойдёт.

83

Re: WSH: Использование COM-сервера без его регистрации в системе

YMP пишет:

Для exe я примеров не видел, не знаю.

Допустим, JSProgBr. Там прилагается progbar.reg, в котором можно посмотреть все данные. Пытаюсь создать по указанной схеме. Запускаю прилагаемый progbar.vbs. Пишет: Ошибка в бмблиотеке dll.
Смотрю в журнал, а он какую-то ерунду пишет:
Ошибка при создании контекста активации для "<Путь>\wscript.exe.Manifest". Не найдена зависимая сборка "sqlite3.sxs,type="win32",version="1.0.0.0"".
Где <Путь> не соответсвует тому, по которому я запускаю exe. После этой папки я уже много откуда запускал (забыл про неё уже). Но даже если удалить оттуда wscript.exe и манифест к нему, то ошибка повторяется с тем же путём. Куда он там кешируется и почему - не понимаю...

84

Re: WSH: Использование COM-сервера без его регистрации в системе

Судя по этой статье, это невозможно: Simplify App Deployment with ClickOnce and Registration-Free COM.

Not every component is a suitable candidate for use under Reg-Free COM. A component is not considered suitable if any of the following are true:

The component is an out-of-process (ActiveX EXE) server. Only DLLs are supported.

The component is a system component or part of the operating system, such as XML, Data Access, Internet Explorer, or DirectX® components. For example, you should not attempt to isolate components such as Microsoft XML (MSXml.dll) or Microsoft Internet Controls (SHDocVw.dll). These components are either part of the operating system, or can be installed with a separate redistributable package.

The component is part of an application, such as Microsoft Office. For example, you should not attempt to isolate components such as the Microsoft Word Object Model or Microsoft Excel Object Model. These two components are part of Office and can only be used on a machine that has the full Office product installed on it.

The component is intended for use as an add-in or a snap-in, such as an Office add-in or a control in a Web browser. Such components typically require some kind of registration scheme defined by the hosting environment that is beyond the scope of the manifest itself. The other problem is an arbitrary application may not be designed to recognize isolated components, as it probably doesn't have a way to reference your component through a manifest.

The component manages a shared physical or virtual system resource. For example, it could manage some kind of data connection shared between multiple applications or a device driver for a print spooler.

85

Re: WSH: Использование COM-сервера без его регистрации в системе

Что ж, очень жаль. Несколько полезных exe-шников отпадают.
Думаю, надо бы скрипт написать для формирования манифестов для dll. Только вот с именами кустов не всё так гладко. Помозгую.
Если надо, я после сбора коллекции рабочих манифестов выложу их тут. Жаль только спойлера нет для такого кол-ва..

86

Re: WSH: Использование COM-сервера без его регистрации в системе

2All: Для начала хотелось бы всё-таки развёрнутую обзорную статью-инструкцию, которой, вполне возможно, место будет на сайте.

Flasher пишет:

Если надо, я после сбора коллекции рабочих манифестов выложу их тут. Жаль только спойлера нет для такого кол-ва..

Один манифест — один пост.

87 (изменено: Shocker.Pro, 2012-09-07 13:57:27)

Re: WSH: Использование COM-сервера без его регистрации в системе

Доброе время суток всем.
У меня есть проект на VB6, слишком объемный, чтобы запросто менять архитектуру. Проект многопользовательский, работает с централизованной БД. В проекте реализовано обновление клиентской части пользователем. Возникла необходимость разрешить пользователю обновляться в условиях ограниченных прав. Проект включает в себя ocx-библиотеку с набором контролов и классов.

C помощью данной ветки я разобрался (хоть и не сразу) с манифестами - заработало за исключением одной вещи: когда в проекте встречается динамическое создание контрола на форме с помощью:
Me.Controls.Add(....
Получаю ошибку:
Invalid class string.
Looking for object with ProgID:
(причем после ProgID: именно пусто, то есть не как в случае неверного указания имени класса)

Подскажите, можно как-то решить эту проблему?
Исходники тестовых проектов и исполняемые файлы с манифестами тут http://www.sql.ru/forum/actualfile.aspx?id=13126151
__________________________
UPD:  Ответили здесь: http://www.sql.ru/forum/actualutils.asp … g=13127765, ковыряюсь дальше.

UPD2: Проблема теперь в другом виде - контрол создать получилось, но при попытке обратиться к его свойству вылетает. Тестовый проект здесь: http://www.sql.ru/forum/actualfile.aspx?id=13129080. Так что вопрос остался открытым

88

Re: WSH: Использование COM-сервера без его регистрации в системе

Доброе время суток всем.
Попробовал использовать файлы внешних манифестов для расширения приложения

termw.exe.manifest - файл

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
          <dependentAssembly>
              <assemblyIdentity
                  type="win32"
                  name="wso.sxs"
                  version="1.0.0.0" />
          </dependentAssembly>
  </dependency>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
      <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="requireAdministrator"
          uiAccess="false"/>
      </requestedPrivileges>
    </security>
  </trustInfo>

</assembly>

wso.sxs.manifest - файл

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">

<assemblyIdentity
    type="win32"
    name="wso.sxs"
    version="1.0.0.0" />

<file name="wso.dll">

    <comClass
        description="WindowSystemObject Class"
        clsid="{4CE85115-9B90-419F-9193-1C10C75E1383}"
        threadingModel="Both"
        progid="Scripting.WindowSystemObject"
        tlbid="{40CC9252-A25A-4D28-A906-9BD3F752934A}" />

    <comClass
        description="WindowSystemControl Class"
        clsid="{8E57EFA4-E91E-44FC-B69E-7A3BC1F5AB8D}"
        threadingModel="Both"
        progid="Scripting.WindowSystemControl"
        tlbid="{40CC9252-A25A-4D28-A906-9BD3F752934A}" />

    <comClass
        description="WindowSystemObjectExtensions Class"
        clsid="{5D2DE0FD-53BC-4E93-8EB3-9EDC90E17DB6}"
        threadingModel="Both"
        progid="Scripting.WindowSystemObjectExtensions"
        tlbid="{40CC9252-A25A-4D28-A906-9BD3F752934A}" />

    <typelib tlbid="{40CC9252-A25A-4D28-A906-9BD3F752934A}"
        version="1.0"
        helpdir="D:\DISK_RSTYLE_V6\PATH_61\TERM" />

</file>

</assembly>

На WinXP - работает без регистрации
На других системах с WIN7 и выше не хочет. Если зарегистрировать принудительно через rgsvr32 то работает.
В чем может быть проблема.

89

Re: WSH: Использование COM-сервера без его регистрации в системе

dburg, используйте для оформления кода тег code.

90

Re: WSH: Использование COM-сервера без его регистрации в системе

У кого-нибудь есть опыт создания манифестов для дот нет сборок с ком-интерфейсом?

Я так понял, что только mt.exe может помочь в этом вопросе.

91 (изменено: /dev/null, 2016-10-24 18:05:00)

Re: WSH: Использование COM-сервера без его регистрации в системе

Пытаюсь перенести scriptpw.dll из ХР в семерку, создала следующий манифест scriptpw.sxs.manifest:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
   <assemblyIdentity type="win32"
                     name="scriptpw.sxs"
                     version="1.0.0.1" />
   <file name="scriptpw.dll"
         hash="1c5afc560045d0b9b074bca734cb12b7a5eda086"
         hashalg="SHA1">
      <comClass description="Password Class"
                clsid="{834C5A62-E0BB-4FB4-87B9-F37C869C976B}"
                threadingModel="Apartment"
                progid="ScriptPW.Password.1"
                tlbid="{6E3EC78A-6CE7-4298-815B-21BEF4967112}" />
   </file>
</assembly>

Пытаюсь вызвать из JScript'а:

var pass = GetObject('F:\\libs\\scriptpw.dll', 'ScriptPW.Password.1');

Но получаю в итоге ошибку: "Не найдено имя файла или класса при операции программирования объектов". Вопрос очевиден - что нужно поправить, чтобы все заработало?

92

Re: WSH: Использование COM-сервера без его регистрации в системе

/dev/null
Так?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity type="win32" name="scriptpw.sxs" version="1.0.0.1" />
  <file name="scriptpw.dll">
    <typelib
        tlbid="{6E3EC78A-6CE7-4298-815B-21BEF4967112}"
        version="1.0"
        helpdir="" />
     <comClass
        clsid="{834C5A62-E0BB-4FB4-87B9-F37C869C976B}"
        progid="ScriptPW.Password" />
  </file>
  <comInterfaceExternalProxyStub
      name="IPassword"
      iid="{3D3664FB-A3FB-41F3-9D54-7F99D2FF152F}"
      proxyStubClsid32="{00020424-0000-0000-C000-000000000046}"
      tlbid="{6E3EC78A-6CE7-4298-815B-21BEF4967112}" />
</assembly>

<папка с манифестами>\cscript.exe test.js:

var pass = New ActiveXObject('ScriptPW.Password');

93 (изменено: /dev/null, 2016-10-24 22:38:34)

Re: WSH: Использование COM-сервера без его регистрации в системе

Flasher, прежде спасибо, что не оставили без внимания мою проблему, однако Ваш вариант почему-то также не срабатывает. Я также прописала в cscript.exe.manifest зависимости, положила манифесты и библиотеку в системную папку, а в итоге по-прежнему пишет: "Невозможно создание объекта сервером программирования объектов".

94

Re: WSH: Использование COM-сервера без его регистрации в системе

/dev/null пишет:

также прописала в cscript.exe.manifest зависимости

А зачем Вам cscript? Консоль нужна? Впрочем, вся разница в одной букве на выбор w/cscript.exe.manifest:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity type="win32" name="w/cscript.exe" version="1.0.0.0" />

  <dependency>
     <dependentAssembly>
        <assemblyIdentity type="win32" name="scriptpw.sxs" version="1.0.0.1" />
     </dependentAssembly>
  </dependency>

</assembly>

95

Re: WSH: Использование COM-сервера без его регистрации в системе

Flasher, у меня в манефесте для cscript.exe точто так и прописано, но суть одна и та же. Я все статьи перечитала как на форуме, так и на сайте Майкрасофт, но нужного эффекта так и не добилась. Целый день впустую, можно сказать, прошел.

96

Re: WSH: Использование COM-сервера без его регистрации в системе

/dev/null
Если у Вас Win7 x64, то w/cscript.exe нужно было тащить из SysWOW64, а не system32.
И ещё после правки библиотечного манифеста, нужно высвободишь кэш ложной (с ошибкой) правкой w/cscript.exe.manifest, потом вернуть как было - и снова к тестам.
И, надеюсь, понятно, что при запуске от wscript.exe, манифест рядом с ним должен быть его, т.е. wscript.exe.manifest, а не сscript.exe.manifest.

97

Re: WSH: Использование COM-сервера без его регистрации в системе

Flasher, система x86, а на счет кэша не поняла. Что нужно сделать, чтобы его высвободить?

98

Re: WSH: Использование COM-сервера без его регистрации в системе

Flasher пишет:

И, надеюсь, понятно, что при запуске от wscript.exe, манифест рядом с ним должен быть его, т.е. wscript.exe.manifest, а не сscript.exe.manifest.

Это просто очевидно и само собой разумеется.

99

Re: WSH: Использование COM-сервера без его регистрации в системе

/dev/null
У меня в данный момент такая же. Допишите любой символ в начале или конце текста внутри w/cscript.exe.manifest и сохраните, после попытки вызова должно вывалиться окно "Нет доступа". Точнее:

Не удалось запустить приложение, поскольку его параллельная конфигурация неправильна. Дополнительные сведения содержатся в журнале событий приложений или используйте программу командной строки sxstrace.exe для получения дополнительных сведений.

Потом уберите символ и тестируйте заново.

100

Re: WSH: Использование COM-сервера без его регистрации в системе

Flasher, теперь пишет "Ошибка выполнения Microsoft JScript: Разрешение отклонено"