2010-01-04 40 views
8

Tôi có một ứng dụng được viết trong Delphi 2006 đã hoạt động tốt trong Windows XP. Tôi đóng gói ứng dụng bằng cách sử dụng Inno Setup, sử dụng Program Files làm thư mục mặc định. Một vài người dùng đã di chuyển sang Windows Vista và Windows 7. Vấn đề ở đây là ứng dụng tạo ra một số tệp bên trong thư mục cài đặt của riêng nó. Điều này đã được làm việc trong XP nhưng trong Windows Vista người dùng đã gặp vấn đề với các tập tin được tạo ra (chúng không xuất hiện và vv). Sau khi điều tra báo cáo của người dùng, tôi đã phát hiện KB 927387: "Các vấn đề về ảo hóa tệp và đăng ký thường gặp trong Windows Vista hoặc Windows 7."Làm cách nào để chương trình của tôi hoạt động trong Windows Vista và Windows 7?

Chạy ứng dụng có quyền quản trị chỉ giải quyết được vấn đề, nhưng đó là (tôi nghĩ) một cách giải quyết khủng khiếp. Tôi muốn biết nếu có bất kỳ chỉ thị hoặc lời khuyên nào để làm cho ứng dụng tương thích với Vista và 7, bởi vì nhiều người dùng sẽ sớm chuyển sang các hệ điều hành này.

+0

Bạn sẽ làm gì trên Windows XP khi người dùng là người dùng chuẩn? –

Trả lời

12

Đối với Vista/Win7, ứng dụng của bạn không thể đặt tệp trong thư mục con của Program Files/Programs trừ khi UAC bị tắt hoặc ứng dụng đang chạy ở mức cao. Lưu ý rằng "được nâng lên" không nhất thiết có nghĩa là "đã đăng nhập với tư cách Quản trị viên". Người dùng không phải quản trị viên có thể nâng cao và Quản trị viên không nhất thiết phải nâng cao.

Nếu ứng dụng cố ghi vào tệp chương trình nhưng không được nâng lên, hệ điều hành sẽ chặn ứng dụng hoặc "ảo hóa" ghi (đặt tệp ở nơi khác), tùy thuộc vào cách cấu hình UAC. Không ai giúp ứng dụng thành công ở những gì nó đã cố gắng để od.

Vì vậy, nó cần phải đặt chúng ở một nơi khác. Nơi phụ thuộc vào lý do tại sao các tập tin được tạo ra, và bạn đã không nói với chúng tôi điều đó. Bạn có thể đọc this article để tìm hiểu về các tùy chọn. Lưu ý rằng ngoài các thư mục AppData và Roaming của người dùng, cũng có một hồ sơ "Tất cả người dùng" (được chia sẻ).

Bạn có lẽ nên xem this article and screencast, thảo luận về UAC ở độ sâu từ điểm Delphi.

13

Bạn cần phải viết lại ứng dụng của mình để lưu trữ các tệp của nó ở đúng vị trí, ngay cả trong XP, nhưng đặc biệt là trong Vista trở đi, đặc biệt nếu UAC được bật. Điều này ngày càng trở nên quan trọng để có được quyền như Microsoft giữ khóa xuống và thực thi các mô hình bảo mật của nó với mỗi phiên bản hệ điều hành mới. Các quy tắc về cách quản lý đúng cách các tệp liên quan đến ứng dụng và người dùng được ghi lại trên MSDN, ví dụ: "Application Specification for Microsoft Windows 2000 for Desktop Applications, Chapter 4: Data and Settings Management""Application Specification for Microsoft Windows 2000 for Desktop Applications Appendix A: Best Practices" (có, chúng cũ, nhưng vẫn còn khá liên quan). Nhìn vào SHGetSpecialFolderLocation(), SHGetFolderPath(), SHGetKnownFolderPath() và các chức năng liên quan khác để giúp bạn.

4

Tệp bạn tạo để sử dụng bởi ứng dụng của bạn ngoài thời gian cài đặt nên đi vào thư mục ProgramData nếu toàn cầu đến máy trạm hoặc vào thư mục ApplicationData của người dùng nếu cụ thể cho người dùng.

Đối với trường hợp bạn hoàn toàn phải đặt tệp trong thư mục tệp chương trình, bạn có thể sử dụng lệnh com để yêu cầu độ cao. This is discussed in great detaildelphi specific bits are also available. Một ví dụ mà tôi đã sử dụng này là vá cơ sở cài đặt người dùng của tôi. Họ được cảnh báo bởi UAC rằng hệ thống cần phải thực hiện thay đổi, vì vậy nếu bạn làm điều này như một nhiệm vụ tự động, bạn có thể cần phải suy nghĩ lại logic để có nhiều người dùng điều khiển hơn.

2

Tôi có một yêu cầu tương tự here (Stack Overflow).Cuối cùng, tôi nhận ra rằng tôi cần đưa ứng dụng của mình vào tệp chương trình vào thời gian cài đặt (yêu cầu UAC/độ cao) và sau đó lưu trữ dữ liệu ứng dụng của tôi trong thư mục Dữ liệu ứng dụng của người dùng. Tôi đã phải thay đổi cách chương trình của mình tạo cài đặt cấu hình 'mặc định' và cũng là nơi tôi đã lưu công cụ này, nhưng chúng tôi đã nỗ lực hết sức - cuối cùng chúng tôi đã cài đặt và chạy tốt trên XP, Vista và Windows 7

Lần truy cập UAC duy nhất mà chúng tôi nhận được là lúc cài đặt, điều này có ý nghĩa với tôi (và bạn cũng nhận được lượt truy cập tương tự vào thời gian cài đặt trên máy Mac). Chúng tôi không có bất kỳ dữ liệu nào phổ biến đối với tất cả người dùng trong trường hợp cụ thể này nhưng tôi đã xem xét thư mục Đặc biệt của Dữ liệu Chương trình nếu trường hợp đó xảy ra.

Phần mềm cài đặt chúng tôi sử dụng (Setup Factory) thực hiện điều này khá đơn giản (chúng tôi vừa viết một chút mã để phát hiện XP so với Vista/Win7 và chọn thư mục đặc biệt phù hợp). Nó sẽ dễ dàng để làm điều này trong Inno Setup quá, từ những gì kinh nghiệm hạn chế tôi có của nó.

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