Trên máy thử nghiệm tôi đang chạy (Windows XP, IIS5.1), đoạn mã sau được thực thi trong C# .NET WebService (.SVC) dưới nhận dạng quy trình tùy chỉnh (sử dụng machine.config để chỉ định người dùng)
Môi trường.GetFolderPath(Môi trường. SpecialFolder.ApplicationData);
Trả lại chính xác
c:\Tài liệu và Cài đặt\myUserName\Dữ liệu ứng dụng
Tuy nhiên, chạy IIS6 trên máy Windows 2003 (Dịch vụ đầu cuối) và thực thi cùng một mã nhưng hiện đang sử dụng ApplicationPool chỉ định cùng một ID tiến trình, phương thức trả về:
c:\Tài liệu và Cài đặt\Người dùng mặc định\Dữ liệu ứng dụng
Những điều tôi đã kiểm tra khi chạy trên máy Win2003/IIS6:
- myUserName thuộc nhóm IIS_WPG (thậm chí đã thử Admin)
- Các cuộc gọi đến Môi trường.UserName trả về chính xác myUserName
- gọi Môi trường.GetFolderPath(Môi trường. SpecialFolder.LocalApplicationData); Cũng trả về đường dẫn "người dùng mặc định", giống như DesktopDirectory
- Đăng nhập với tên myUserName và đảm bảo C:\Tài liệu và cài đặt\myUserName hiện hữu
- Chạy cùng một mã trong ứng dụng .net trên máy Windows 2003, thao tác này hoạt động và trả về đường dẫn chính xác.
Tôi bối rối, nó chỉ xuất hiện khi chạy trên IIS6. Gần giống như nó nghĩ cuộc gọi đến từdịch vụ mạnghoặchệ thống cục bộngười dùng và nó không kiểm tra danh tính mà nhóm ứng dụng đang chạy.
Nhân tiện, khi tôi nhìn vào Procmon và quan sát ứng dụng C++ đang được gọi từ dịch vụ web, nó đang đọc và viết C:\Tài liệu và cài đặt\myUserName\AppliconData Tuy không có vấn đề gì như vậy nhưng có vẻ như nó cũng không có vấn đề gì, có thể nó được xây dựng bằng một con đường khác.
Tôi bắt đầu nghĩ đây có thể là một lỗi trong .NET? ?
Cảm ơn.
tom deloford
Đã giải quyết. Rõ ràng đây là "theo thiết kế" vì IIS6 không tải cài đặt hồ sơ người dùng.
Microsoft đề nghị tôi nên nâng cấp lên IIS7 hoặc gọi LoadUserProfile trước, tôi muốn biết điều gì đã khiến họ thay đổi chức năng của IIS5.1.
http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/890fa85a-b11a-4fbe-a333-cbe69abd72a7
Dù bài học là gì, đừng cho rằng các tính năng chưa bị loại bỏ và luôn sử dụng cùng một máy chủ ứng dụng để kiểm tra, ngay cả khi điều đó khiến bộ phận CNTT khó chịu!
Về lỗi đường dẫn được trả về bởi Environment.GetFolderPath(Environment. SpecialFolder.ApplicationFolder) trong c# - IIS6 WebService, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/3943626/
Tôi là một lập trình viên xuất sắc, rất giỏi!