Programatically, регистрирующий .dll's на Windows Vista (использующий DllRegisterServer)

Если я понимаю Ваш вопрос правильно, я занялся этой проблемой с помощью quasi-hacky подхода сравнения Упорядоченных объектов определить, варьируются ли какие-либо атрибуты. Введение в конце следующего кода было бы примером:

class Foo
  attr_accessor :foo, :bar, :baz

  def initialize(foo,bar,baz)
    @foo = foo
    @bar = bar
    @baz = baz
  end
end

objs = [Foo.new(1,2,3),Foo.new(1,2,3),Foo.new(2,3,4)]

# find objects that are uniq with respect to attributes
objs.inject([]) do |uniqs,obj|
  if uniqs.all? { |e| Marshal.dump(e) != Marshal.dump(obj) }
    uniqs << obj
  end
  uniqs
end
5
задан Dimitri C. 8 September 2009 в 09:45
поделиться

2 ответа

К сожалению, я не смог заставить это работать для всех DLL, даже с отличными советами Криса Беке . Я не хотел тратить слишком много времени на решение проблемы, поэтому теперь просто вызываю regsvr32.exe . Я ожидаю, что этот .exe будет присутствовать на всех машинах Windows, так что думаю, что это достаточно хорошее решение.

1
ответ дан 14 December 2019 в 13:42
поделиться

Для регистрации COM требуется доступ на запись в HKEY_LOCAL_MACHINE часть реестра.

В UAC для доступа на запись к HKEY_LOCAL_MACHINE требуется ] администратор с повышенными правами .

Самый простой способ получить процесс с повышенными правами - создать его с помощью манифеста, в котором указан доступ "requireAdministrator". - Посмотрите в Project Properties -> Configuration Properties -> Linker-> Manifest File -> UAC Execution Level, чтобы установить правильные настройки.

Это означает, что вы, вероятно, захотите разделить EXE на две части. «Обычная» часть asInvoker и, если саморегистрация обнаруживается как требование, часть InstallMyself с повышенными правами. Когда невысокая часть обнаруживает условие первого прогона, ему необходимо использовать ShellExecute (Ex) для выполнения части FirstInstall.exe - использование CreateProcess или какого-либо другого API просто завершится ошибкой с ошибкой недостаточных прав. ShellExecute представит приглашение UAC.

Можно использовать Application Isolation для загрузки COM-библиотек без какого-либо шага регистрации.


К сожалению, причина не может быть определена. Однако, если вы заинтересованы в проведении дальнейших исследований, вам может очень помочь инструмент Process Monitor из SysInternals . Монитор процессов может регистрировать весь доступ к файлам, реестру и другой доступ для процесса, включая все коды успешных и неудачных попыток, что значительно упрощает отладку подобных проблем, не прибегая к более глубоким средствам обратного проектирования.

Часть exe - использование CreateProcess или какого-либо другого API просто завершится ошибкой с ошибкой недостаточных прав. ShellExecute представит приглашение UAC.

Можно использовать Application Isolation для загрузки COM-библиотек без какого-либо шага регистрации.


К сожалению, причина не может быть определена. Однако, если вы заинтересованы в проведении дальнейших исследований, вам может очень помочь инструмент Process Monitor из SysInternals . Монитор процессов может регистрировать весь доступ к файлам, реестру и другой доступ для процесса, включая все коды успешных и неудачных попыток, что значительно упрощает отладку подобных проблем, не прибегая к более глубоким средствам обратного проектирования.

Часть exe - использование CreateProcess или какого-либо другого API просто завершится ошибкой с ошибкой недостаточных прав. ShellExecute представит приглашение UAC.

Можно использовать Application Isolation для загрузки COM-библиотек без какого-либо шага регистрации.


К сожалению, причина не может быть определена. Однако, если вы заинтересованы в дальнейшем исследовании, вам может помочь инструмент Process Monitor из SysInternals . Монитор процессов может регистрировать весь доступ к файлам, реестру и другой доступ для процесса, включая все коды успешных и неудачных попыток, что значительно упрощает отладку подобных проблем без необходимости прибегать к более глубоким средствам обратного проектирования.

Можно использовать Изоляцию приложений для загрузки COM-библиотек без каких-либо шагов регистрации.


К сожалению, причина не может быть определена. Однако, если вы заинтересованы в дальнейшем исследовании, вам может помочь инструмент Process Monitor из SysInternals . Монитор процессов может регистрировать весь доступ к файлам, реестру и другой доступ для процесса, включая все коды успешных и неудачных попыток, что значительно упрощает отладку подобных проблем без необходимости прибегать к более глубоким средствам обратного проектирования.

Можно использовать Изоляцию приложений для загрузки COM-библиотек без каких-либо шагов регистрации.


К сожалению, причина не может быть определена. Однако, если вы заинтересованы в проведении дальнейших исследований, вам может очень помочь инструмент Process Monitor из SysInternals . Монитор процессов может регистрировать весь доступ к файлам, реестру и другой доступ для процесса, включая все коды успешных и неудачных попыток, что значительно упрощает отладку подобных проблем, не прибегая к более глубоким средствам обратного проектирования.

очень поможет инструмент Process Monitor из SysInternals . Монитор процессов может регистрировать весь доступ к файлам, реестру и другой доступ для процесса, включая все коды успешных и неудачных попыток, что значительно упрощает отладку подобных проблем, не прибегая к более глубоким средствам обратного проектирования.

очень поможет инструмент Process Monitor из SysInternals . Монитор процессов может регистрировать весь доступ к файлам, реестру и другой доступ для процесса, включая все коды успешных и неудачных попыток, что значительно упрощает отладку подобных проблем без необходимости прибегать к более глубоким средствам обратного проектирования.

5
ответ дан 14 December 2019 в 13:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: