Ứng dụng không chạy với đặc quyền được nâng cao sẽ không có quyền truy cập vào các thư mục Program Files
và Program Files (x86)
. Điều này là tốt cho an toàn. Ngoài ra, trong hầu hết các trường hợp khi nhà phát triển yêu cầu chương trình của mình lưu dữ liệu trong thư mục Program Files
, chẳng hạn như cài đặt chương trình, anh đã quên hoàn toàn cài đặt chương trình đó là điều dành cho mỗi người dùng! Tức là, mọi người dùng trên máy tính cục bộ đều có thể sử dụng chương trình mà không ảnh hưởng đến người dùng khác. Nói cách khác, thay vào đó, ứng dụng được xử lý tốt nên lưu cài đặt của nó trong thư mục
C:\Users\<User Name>\AppData\Local\<Manufacturer>\<Product>\<Product Version>
.
Ví dụ, phần mềm AlgoSim tôi viết để
C:\Users\<User Name>\AppData\Local\Rejbrand\AlgoSim\2.0
Tất nhiên, con đường
C:\Users\<User Name>\AppData\Local\
phải được xem xét-up tự động khi chạy. Sử dụng
SHGetFolderPath(0, CSIDL_LOCAL_APPDATA, 0, SHGFP_TYPE_CURRENT, @path);
cho việc này. Kể từ khi Windows Vista, các ứng dụng không chạy với đặc quyền nâng lên cố gắng ghi vào thư mục Program Files
(hoặc Program Files (x86)
) trên thực tế sẽ ghi vào thư mục VirtualStore, vô tình. Microsoft nghĩ rằng điều này sẽ tốt hơn một lỗi chương trình (do hạn chế truy cập). Và thực sự, nhờ vào điều này, hầu hết các chương trình cũ lưu cài đặt của chúng trong thư mục Program Files
sẽ tiếp tục hoạt động với Windows Vista + và mỗi người dùng sẽ nhận được cài đặt của riêng mình, làm tiền thưởng, mặc dù nhà sản xuất phần mềm gốc không nghĩ về điều này .
Bạn có thể sử dụng tệp kê khai để cho Windows biết rằng ứng dụng của bạn biết VirtualStore và Windows không nên thay đổi bất kỳ đường dẫn nào trong thời gian chạy. Nhưng nếu bạn thực sự muốn có thể ghi vào thư mục Program Files
, thì tôi nghĩ rằng bạn phải chạy ứng dụng với các đặc quyền được nâng lên, mỗi lần, điều này không thể tránh khỏi nói chung.
Chi tiết về cách tạo tệp kê khai để làm cho chương trình của bạn hiển thị lời nhắc UAC trên mỗi lần thực thi và cách vô hiệu hoá VirtualStore, đã được giải quyết tại một số câu hỏi tràn trước Stack . Vui lòng sử dụng hộp tìm kiếm!
Sửa lỗi ngắn hạn "sử dụng tệp kê khai requireaccounts". Er, không, đừng! –