2013-08-05 96 views
8

Tôi đang sử dụng C# với .net 2.0Làm thế nào để ngăn chặn chuyển hướng tập tin từ dữ liệu Chương trình VirtualStore ProgramData

Tôi lưu dữ liệu chương trình của tôi trong một file dưới: C:\Program Data\MyProgramName\fileName.xml

Sau khi cài đặt và chạy ứng dụng của tôi một thời gian tôi gỡ cài đặt nó (trong quá trình gỡ cài đặt, tôi sẽ xóa tất cả các tệp khỏi "dữ liệu chương trình") và sau đó tôi cài đặt lại ứng dụng và chạy ứng dụng đó.

Thig lạ là ứng dụng của tôi bắt đầu như thể các tệp trong dữ liệu chương trình đã tồn tại - có nghĩa là tôi đã có dữ liệu cũ trong ứng dụng của mình mặc dù tệp dữ liệu đã bị xóa.

Khi chạy:

File.Exists ("C: \ Program Data \ MyProgramName \ fileName.xml")

tôi "true" mặc dù tôi biết chắc chắn rằng tập tin không tồn tại.

Điều trở nên lạ khi tôi chạy ứng dụng dưới dạng quản trị viên và sau đó tệp không tồn tại.

Sau một nghiên cứu, tôi phát hiện ra rằng khi chạy ứng dụng của tôi không có priviliges quản trị thay vì nhận được:

"C: \ Program Data \ MyProgramName \ fileName.xml" tôi nhận được "C: \ Users \ uSERNAME \ AppData \ Local \ VirtualStore \ ProgramData \ MyProgramName \ fileName.xml"

và thực sự đã có một tập tin đã tồn tại từ quá trình cài đặt trước đó (mà tôi rõ ràng đã không xóa, vì tôi đã không biết nó tồn tại). vì vậy chỉ cần hướng dẫn tôi làm thế nào tôi có thể ngăn chặn điều này khi các ứng dụng chạy không có quyền quản trị. tôi không muốn tạo bất kỳ tệp nào tự động trong thư mục VirtualStore. hãy thảo luận tất cả các cách có thể để ngăn chặn điều này. cảm ơn

Trả lời

4

Trước tiên, hãy tự hỏi, việc này có cần lưu toàn cầu cho tất cả người dùng không?

Nếu không cần phải lưu, hãy lưu tệp trong Dữ liệu ứng dụng thay vào đó, bạn có thể nhận đường dẫn với Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), nó sẽ luôn mở rộng đáng tin cậy thành C:\Users\Username\AppData\Roaming\. Do lưu ý rằng đường dẫn này là duy nhất cho mỗi người dùng mặc dù.

Nếu bạn phải làm vậy, bạn đã hết may mắn. Không có cách nào đáng tin cậy để lưu trữ dữ liệu ứng dụng cho tất cả người dùng không có quyền quản trị (hoặc UAC) trên bất kỳ Windows post-XP nào không vô cùng khó hiểu, như lưu trữ dữ liệu của bạn trong người dùng công cộng (có thể hoặc không thể, tôi có thể ' t kiểm tra ngay bây giờ).

+1

tập tin chuyển hướng đến VirtualStore chỉ xảy ra trong win7 không trong xp. tôi luôn muốn tạo tệp từ nơi ứng dụng của chúng tôi đang chạy. tập tin là toàn cầu cho tất cả người dùng. chỉ cần hướng dẫn tôi làm thế nào tôi có thể ngăn chặn điều này. – Thomas

+0

@Thomas đó là do các cải tiến bảo mật trong Vista và cao hơn. Trên Windows XP, tất cả các tài khoản quản trị viên chạy tất cả các ứng dụng vì các hạn chế của quản trị viên và thư mục khá xấu. Quan điểm của tôi là VirtualStore là một tính năng bảo mật không thể làm việc xung quanh mà không thay đổi thư mục. Tuy nhiên, bạn có thể thử viết các thiết lập vào thư mục Application Data của hồ sơ công khai, vì làm như vậy sẽ cho phép tất cả các tài khoản truy cập nó. –

+1

Tôi không viết bất kỳ thứ gì trong thư mục lưu trữ ảo. Tôi đang viết/đọc tệp từ ứng dụng của mình nhưng sao chép tập tin đó vào kho ảo \ ... và buộc ứng dụng của tôi đọc tệp từ đó.ca u plzz cho tôi biết cách tôi chạy các ứng dụng của tôi với quyền quản trị tự động khi phát triển với VS2005. người dùng đăng nhập có thể là hoặc có thể không phải là quản trị viên nhưng ứng dụng của tôi sẽ đóng vai trò là quản trị viên. trong VS2005 không có cách nào để thêm tập tin manifest.so hướng dẫn tôi làm thế nào tôi có thể xử lý tình trạng này. cảm ơn – Thomas

-1

Tôi tìm thấy một công việc xung quanh cho vấn đề này khi chuyển ứng dụng win32 rất cũ sang windows 7 & 10. Chương trình đã ghi vào cơ sở dữ liệu trên C: \ Program Files ... nhưng hệ điều hành tự động đã thay đổi đường dẫn đến cửa hàng ảo . Tuy nhiên cơ sở dữ liệu đã được yêu cầu trên toàn cầu. Bằng cách thay đổi chế độ compatablilty thành Windows 95 hoặc XP SP2 và luôn chạy với tư cách quản trị viên, cơ sở dữ liệu đã được làm việc trực tiếp trong C: \ Program Files \ etc.

Có tác động an ninh cho điều này và hộp đã bị xóa khỏi tất cả các mạng và adapter bị vô hiệu hóa, vv

+0

Thay đổi chế độ tương thích thành WIndows XP không phải là lựa chọn tốt. – vijayst