Если я понимаю Ваш вопрос правильно, я занялся этой проблемой с помощью 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
К сожалению, я не смог заставить это работать для всех DLL, даже с отличными советами Криса Беке . Я не хотел тратить слишком много времени на решение проблемы, поэтому теперь просто вызываю regsvr32.exe . Я ожидаю, что этот .exe будет присутствовать на всех машинах Windows, так что думаю, что это достаточно хорошее решение.
Для регистрации 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 . Монитор процессов может регистрировать весь доступ к файлам, реестру и другой доступ для процесса, включая все коды успешных и неудачных попыток, что значительно упрощает отладку подобных проблем без необходимости прибегать к более глубоким средствам обратного проектирования.