2009-08-30 41 views
15

Tôi là người dùng bị giới hạn và tôi cần phải viết macro Outlook để hiển thị thư viện C# trong Outlook 2003 và 2007.COM Interop không có sự ràng buộc

Tôi không có bất kỳ quyền quản trị viên nào, thậm chí không cài đặt thời gian, vì vậy tôi không thể chạy RegAsm và tôi không thể (tôi giả định) viết một add-in được quản lý.

Có cách nào để gọi mã Net từ VBA trong trường hợp này hay không hoặc có giải pháp nào khác không?

này là dành cho mục đích cá nhân mà thôi, vì vậy một hack xấu xí là hoàn toàn chấp nhận được (miễn là nó hoạt động)

Trả lời

14

Tôi đã giải quyết vấn đề này bằng cách chạy regasm với tùy chọn /regfile và thay thế HKLM bằng HKCU trong tệp .reg kết quả.

+0

đầu ra regasm mà tôi nhận được khi sử dụng phương pháp này không chứa bất kỳ khóa HKLM nào, chỉ HKEY_CLASSES_ROOT, cũng yêu cầu quyền quản trị để ghi vào. Bạn đã tìm thấy một cách xung quanh này quá hay là trường hợp của tôi chỉ khác với bạn? –

+1

Heh ... nevermind, tôi tìm thấy nó: HKCU \ Software \ Classes –

+0

Bạn đặt DLL ở đâu trên máy của người dùng? Nó vẫn không yêu cầu chạy gacutil (yêu cầu quyền quản trị)? –

1

Đáng tiếc là do cách mà COM hoạt động nó sẽ không thể cài đặt một đối tượng COM (interop hoặc) không có đặc quyền quản trị viên.

Khi bạn đăng ký một đối tượng com, nó ghi một số mục nhập vào HKEY_CLASSES_ROOT là khóa cấp máy và do đó yêu cầu đặc quyền quản trị viên.

Bây giờ bởi vì bạn đã nói rằng một giải pháp tấn công có thể chấp nhận được ở đây là một số bước có thể bạn có thể thực hiện để làm cho nó hoạt động; tuy nhiên nếu bạn không có quyền quản trị, tôi giả định rằng đây không phải là máy của bạn và rất có thể là máy tính. Thực hiện các bước này rất có thể khiến bạn bị sa thải. Tuyên bố từ chối trách nhiệm tiêu chuẩn và không có điều gì: Đó không phải là lỗi của tôi nếu bạn là một người khờ dại và khiến bản thân bị kiện/sa thải/bắn/giả mạo/v.v.

Trước tiên, bạn cần tìm hiểu xem cần phải thêm khóa đăng ký nào. Hãy chắc chắn rằng bạn đang làm điều này trên một máy 'sạch' mà máy chủ không nhìn thấy thành phần của bạn trước (hoặc một trong những bạn biết rằng không có các phím reg). Cài đặt chương trình giám sát máy để nắm bắt các phím. Here là một liên kết đến một bài viết MS [không liên quan] nơi họ đề xuất một số ứng dụng thực hiện điều đó.

Bây giờ với màn hình đang chạy cài đặt bạn addin. Bây giờ bạn có thể nhận được một bản ghi của những gì các phím cần phải được tạo ra. Sử dụng nhật ký của bạn tạo tệp xuất đăng ký.

Bây giờ ở đây là nơi nó trở nên phức tạp. Về cơ bản những gì bạn sẽ làm là khởi động máy từ một hình ảnh BartPE và gắn kết registry và chạy kịch bản của bạn; tuy nhiên các đường dẫn chính sẽ không chính xác nên các tập lệnh sẽ không hoạt động 'ngoài hộp'.

MS có bài viết TechNet (nhưng liên kết đã tạm dừng trong đó để nó không phát tốt ở đây) vì vậy Google, nó phải là kết quả đầu tiên.

Sau khi bạn đã đọc bài viết đó, bạn sẽ thấy rằng máy đăng ký sẽ được gắn dưới dạng khóa con của HKEY_LOCAL_MACHINE. Những gì bạn cần làm là thay đổi xuất khẩu đăng ký của bạn để phù hợp với đường dẫn mới. Ngay khi bước này hoàn tất, bạn sẽ có thể khởi động từ hình ảnh BartPE của bạn, gắn kết sổ đăng ký, và sau đó nhập các tập lệnh của bạn, hủy kết nối tổ hợp và sau đó khởi động lại. Giả sử bạn sao chép các tập tin vào đường dẫn chính xác sau đó nó 'nên' làm việc.

Chúc may mắn.

+0

Điều gì về COM miễn phí đăng ký hoặc HKCU \ Class? – SLaks

+4

Không có cách nào mà tôi đang làm giải pháp này. – SLaks

+0

Tôi nghĩ rằng bạn sẽ muốn sử dụng nó, nhưng đưa thông tin ra có cho những người khác đang hack. Bạn có ý nghĩa gì khi đăng ký COM miễn phí? Bạn chỉ có thể sử dụng HKCU \ Classes vì ​​COM vẫn yêu cầu các mục trong HKLM. –

1

Tôi thấy có thể solution, nhưng tôi chưa có thời gian để thử.

4

Đăng ký đối tượng COM (ví dụ: điều khiển ActiveX) và hiển thị đối tượng cho tất cả người dùng trong hệ thống yêu cầu quyền quản trị.

NHƯNG, nếu khả năng hiển thị cho tất cả người dùng là không cần thiết (hoặc không thể do giới hạn người dùng hạn chế) thì đối tượng COM chỉ có thể được đăng ký cho người dùng cụ thể.

Điều này thường được thực hiện bằng cách đăng ký đối tượng trong HKCU thay vì HKLM. Điều này sẽ áp dụng cho các đối tượng COM "thông thường" và các đối tượng được hiển thị thông qua .NET COM Interop.

Các phương pháp tiếp cận hạt mịn khác cũng thoát, COM RegFree đã đề cập giải quyết một tệp thực thi cụ thể.

Vì vậy, cho tất cả các giải pháp trên để nắm bắt tất cả thông tin vào tệp reg và thay thế HKLM bằng HKCU sẽ hoạt động (không tốt, nhưng các công cụ này cũng vậy).

+0

Tôi đã làm điều này. – SLaks

4

RegistrationServices.RegisterAssembly API .NET (mà tôi tin là được sử dụng bởi RegAsm.exe).

Ngoài ra còn có RegOverridePredefKey Win32 API, kín đáo nhưng khá hữu ích, cho phép để remap HKEY_CLASSES_ROOT (được sử dụng bởi RegisterAssembly) để HKEY_CURRENT_USER\Software\Classes.

Chương trình thông minh có thể sử dụng cả RegistrationServices.RegisterAssemblyRegOverridePredefKey để đăng ký hội đồng cho khách hàng COM dưới HKEY_CURRENT_USER.

Tôi chưa thử điều này, nhưng tôi tin rằng nó khá khả thi.

Cập nhật, dường như cách tiếp cận này does works.

+1

Đó là một ý tưởng thú vị. Tôi sẽ thử. –

Các vấn đề liên quan