2008-08-20 28 views
25

Đối với ứng dụng C# của tôi, tôi không muốn luôn nhắc độ cao khi bắt đầu ứng dụng, nhưng nếu họ chọn đường dẫn đầu ra được bảo vệ UAC thì tôi cần yêu cầu nâng cao.Yêu cầu nâng cấp UAC của Windows Vista nếu đường dẫn được bảo vệ?

Vì vậy, làm cách nào để kiểm tra xem đường dẫn có được bảo vệ bằng UAC hay không và sau đó làm cách nào để yêu cầu thực hiện giữa độ cao?

Trả lời

25

Cách tốt nhất để phát hiện xem họ không thể thực hiện hành động là thử nó và bắt giữ UnauthorizedAccessException.

Tuy nhiên, như @DannySmurfcorrectly points out bạn chỉ có thể nâng cao đối tượng COM hoặc quy trình riêng biệt.

Có một ứng dụng trình diễn trong các Mẫu Công nghệ Cross SDK của Windows được gọi là UAC Demo. Ứng dụng trình diễn này cho thấy một phương thức thực hiện các hành động với một quá trình nâng cao. Nó cũng chứng tỏ làm thế nào để tìm hiểu xem một người dùng hiện là một quản trị viên.

+0

Đẹp tham chiếu đến bản demo UAC, chính xác những gì tôi cần. Cảm ơn rất nhiều. Ước gì tôi có thể cung cấp cho đại diện nhiều hơn đôi khi! – Ryan

+0

@Ryan Bạn được chào đón. Tôi là một chút thất vọng UAC khó có vẻ như trong một môi trường được quản lý. Vui lòng duyệt qua hồ sơ người dùng của tôi và upvote các câu hỏi khác của tôi! :) –

+0

BTW, tên ngoại lệ là UnauthorizedAccessException với z trong Unauthorized. Chỉ vậy thôi ;) –

16

Yêu cầu độ cao giữa thực hiện yêu cầu bạn một trong hai:

  1. Sử dụng một điều khiển COM đó là nâng lên, trong đó sẽ đưa ra một dấu nhắc
  2. Bắt đầu một quá trình thứ hai được nâng lên từ đầu.

Trong .NET, hiện tại không có cách nào để nâng cao quy trình đang chạy; bạn phải thực hiện một trong những điều hackery ở trên, nhưng tất cả những điều đó là cung cấp cho người dùng sự xuất hiện rằng quy trình hiện tại đang được nâng lên.

Cách duy nhất tôi có thể nghĩ đến để kiểm tra xem đường dẫn có được nâng lên UAC hay không là cố gắng ghi một số thông tin vào nó khi bạn đang ở trạng thái không nâng cao, bắt ngoại lệ, nâng cao và thử lại.

+7

Lưu ý rằng đây không phải là một giới hạn NET - đó là một hạn chế chung của hệ thống User Account Control. –

+4

Lưu ý rằng không phải là giới hạn UAC - đó là một giới hạn chung của mô hình bảo mật trong Windows NT (một tiến trình đang chạy không thể thay đổi mã thông báo bảo mật của nó). –

+1

Lưu ý rằng đó là một điều tốt - nếu không kẻ tấn công nguy hiểm có thể tiêm mã vào quá trình nâng cao, và mã này sẽ được nâng lên cùng với quá trình này. – ghord

1

Bạn có thể muốn thông báo cho người dùng rằng đường dẫn được bảo vệ và yêu cầu họ xuất tệp ra khu vực "an toàn hơn". Bằng cách này, ứng dụng của bạn sẽ không cần độ cao. Tôi chắc chắn nó phụ thuộc vào người dùng của bạn và những gì bạn đang cố gắng làm, tuy nhiên tôi không nghĩ rằng nó quá nhiều để vui lòng cho người dùng biết bạn không cảm thấy ok bán phá giá xyz vào thư mục Windows/System32.

-1

Nếu ổ đĩa thứ cấp của bạn có quyền truy cập tệp riêng, chẳng hạn như bạn đã cài đặt một bản sao khác của cửa sổ trên đó. Nó sẽ nhắc.

Nó cũng sẽ nhắc nếu tệp đang được sử dụng, đôi khi xảy ra nếu bạn có cửa sổ thám hiểm mở cùng thư mục và tệp được chọn với trình xem trước tệp hiển thị nội dung ... được yêu cầu cho phép tệp nếu tệp đang được sử dụng hoặc đó là một thư mục nhạy cảm.

Nếu bạn lặp lại FolderBrowserDialog, hãy đảm bảo thông báo cho người dùng lý do tại sao, để họ không giận ứng dụng của bạn.

Lưu ý: nó bốc mùi không có cách .net yêu cầu quyền, có thể p/gọi win32 api ...?

+0

P/Gọi sẽ không thay đổi bất cứ điều gì; các quy tắc cho UAC giống nhau cho dù bạn được quản lý hay có nguồn gốc. Đó là COM, quá trình bên ngoài hoặc bức tượng bán thân. –

-1

UAC có thể nâng cao đối tượng dựa trên GUID của họ, điều này sẽ (Về lý thuyết) có nghĩa là bất kỳ lớp học với một GUID có thể được nâng lên, The UACDemo cũng sẽ hiển thị như thế nào để làm điều này

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