2010-06-23 50 views
7

Tôi có thư mục chia sẻ mạng được ánh xạ tới ký tự ổ đĩa có thể truy cập từ Windows Explorer, từ dấu nhắc lệnh cũng như từ ứng dụng WinForms của tôi. Nó cũng có thể truy cập từ dịch vụ Windows của tôi bằng cách sử dụng đường dẫn UNC.Không thể truy cập tệp trên chia sẻ mạng được ánh xạ ổ đĩa từ dịch vụ Windows

Tuy nhiên, khi tôi cố gắng truy cập vị trí mạng này bằng cách sử dụng ký tự ổ đĩa được ánh xạ từ dịch vụ Windows, quyền truy cập không thành công. Dịch vụ Windows được định cấu hình để sử dụng thông tin đăng nhập tài khoản "Đăng nhập" cá nhân của tôi, điều này giống nhau trong tất cả các trường hợp trên. Tôi là quản trị viên.

Nhiều trang web của khách hàng sử dụng các ký tự ổ đĩa cho các chia sẻ mạng và tôi không thể luôn kiểm soát điều này và buộc chúng chỉ định đường dẫn UNC thay thế. Tôi cần có khả năng truy cập các chia sẻ mạng bằng cách sử dụng các ký tự ổ đĩa từ một dịch vụ Windows.

Tôi cần làm gì để thiết lập dịch vụ Windows của mình, để nó có thể truy cập vào các thư mục được chia sẻ trên mạng được ánh xạ tới ký tự ổ đĩa? Dịch vụ Windows của tôi được viết bằng C#.

Trả lời

9

Xin lỗi; you can't access mapped drives from Windows services. Như Sheng đã đề xuất, bạn có thể sử dụng một quy trình UI để lấy đường dẫn UNC từ một ổ đĩa được ánh xạ và sau đó chuyển nó tới dịch vụ, mà phải sử dụng đường dẫn UNC.

+0

Cảm ơn bạn đã viết bài. Microsoft nói rõ rằng người ta không nên truy cập các ổ đĩa được ánh xạ từ một dịch vụ Windows. – Elan

+0

Bài báo được trích dẫn chỉ ra rằng các dịch vụ không nên sử dụng hoặc thay đổi ánh xạ ổ đĩa, mà _does not_ có nghĩa là nó không thể được thực hiện.Trong bài viết MS KB, nó thậm chí ngụ ý như vậy khi nó nói: "Vì vậy, các ổ đĩa được chuyển hướng không thể được chia sẻ giữa các tiến trình đang chạy trong các tài khoản người dùng khác nhau." Nói cách khác, phiên đăng nhập và dịch vụ phải chạy dưới cùng thông tin xác thực. Nó có thể được thực hiện. – Garen

+0

@Garen: Mọi bản phát hành chính của Windows đều làm tăng sự tách biệt giữa các dịch vụ và mã máy tính để bàn vì lý do bảo mật. Có * cách * để buộc nó hoạt động ngay bây giờ. Cũng có nhiều cách để ép buộc nó trên các phiên bản Windows trước đó không còn hoạt động nữa. Nó không được hỗ trợ; bạn chỉ cần tạo một sản phẩm có thể phá vỡ trên một phiên bản Windows trong tương lai. (Tôi đang nói từ kinh nghiệm ...) –

4

ổ đĩa được ánh xạ là mỗi đối tượng phiên. Vì vậy, mỗi phiên tương tác có ánh xạ riêng và phiên dịch vụ có một ánh xạ ổ đĩa khác. Để có được đường dẫn UNC chính xác của một ổ đĩa được ánh xạ, bạn cần gọi WNetGetConnection trong phiên chính xác.

Bạn có thể sử dụng bất kỳ phương pháp truyền thông liên phiên để bắt đầu yêu cầu và nhận được kết quả trong dịch vụ, chẳng hạn như WCF, đặt tên đường ống, ổ cắm, vv

+0

Cảm ơn bạn rất nhiều. Tôi đã có thể chuyển đổi ký tự ổ đĩa thành đường dẫn UNC bằng cách sử dụng pinvoke và WNetGetConnection! – Elan

0

hi Elan tôi phải đối mặt với cùng một vấn đề trong dự án của tôi và tôi tìm thấy một giải pháp

và đang làm việc dự kiến ​​làm theo các bước của tôi

    if (api.Docusign_download(strDocuSignUserName, strDocuSignPassword, strDocuSignIntegratorKey, EnvelopeID, Environment.ExpandEnvironmentVariables("%temp%")) == true) 
        { 
         if (m_streamWriter1 != null) 
         { 
          m_streamWriter1.WriteLine(" This envelop id is Downloaded and update the table" + EnvelopeID + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString() + "\n"); 
         } 

         fpath1 = Environment.ExpandEnvironmentVariables("%temp%") + '\\' + EnvelopeID + '1' + ".pdf"; 
         fpath2 = Environment.ExpandEnvironmentVariables("%temp%") + '\\' + EnvelopeID + '2' + ".pdf"; 
         if (System.IO.File.Exists(fpath1)) 
         { 
          fso = new FileSystemObject(); 
          // fso.CopyFile(fileLoc, "\\\\Tech-Pro-01\\D\\", true); i download the file in temp folder and copy file to unc path ur expected work on reverse like access file to unc path he does not work directly but work in in direct access like temp folder to services 
          fso.CopyFile(fpath1, UNC, true); 
          fso.CopyFile(fpath2, UNC, true); 
          fso.DeleteFile(fpath1, true); 
          fso.DeleteFile(fpath2, true); 
          //System.IO.File.Move(fileLoc, fileLocMove); 

im chỉ sử dụng kịch bản ứng dụng di sản trong vb tập tin FSO hệ thống đối tượng

1, đảm bảo quyền truy cập đường dẫn bản đồ của bạn trong iuser và truy cập dịch vụ mạng cho phép máy được cung cấp bản đồ 2, thêm mã hệ thống tham chiếu

3, và unc dụ đường dẫn \ computername \ sharedname \ thư mục \ filename 4, chỉ fso.copyfile (uncpath, tempfoler, true) 5, u truy cập vào một tập tin trong thư mục tạm thời ông được truy cập mong đợi và làm việc hoàn hảo

temp truy cập thư mục "c: \ windows \ temp vì proceess có thể mất cửa sổ thư mục tạm thời chỉ

hy vọng u Elan ông là làm việc một cách hoàn hảo

cảm ơn và coi

jagadeesh Govindaraj Pillai [email protected]

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