2012-04-11 13 views
6

Tôi đang cố gắng để lập trình cho phép chia sẻ với loại chia sẻ công khai trên thiết bị khớp với GUID đã biết trên máy tính Windows 7.INetSharingConfiguration-> EnableSharing (ICSSHARINGTYPE_PUBLIC) trả về 0x80040201

API tại địa chỉ: http://msdn.microsoft.com/en-us/library/windows/desktop/aa365944(v=vs.85).aspx

Danh sách các lỗi hiển thị như sau: E_ABORT, E_FAIL, E_INVALIDARG, E_NOINTERFACE, E_NOTIMPL, E_OUTOFMEMORY, E_POINTER, và E_UNEXPECTED.

Mã lỗi mà tôi nhận được là 0x80040201 sẽ giải quyết: "Sự kiện không thể gọi bất kỳ người đăng ký nào". dường như không khớp với bất kỳ mã lỗi nào được liệt kê ở trên.

Nếu tôi theo cách thủ công vào các thuộc tính của bộ điều hợp mạng và chuyển đến tab chia sẻ và cho phép chia sẻ và chọn mạng riêng và nhấp vào OK, tính năng chia sẻ được bật đúng cách.

Sau khi mã trên của tôi chạy mà không có sự cố.

Tôi thậm chí có thể đặt chia sẻ theo cách thủ công trên một bộ điều hợp khác (công khai) và mạng riêng khác rồi chạy mã của tôi và xem mã của tôi cập nhật mạng công khai và riêng tư theo những gì tôi muốn. Điều này dường như chỉ hoạt động sau khi tự bật chia sẻ theo cách thủ công thông qua ngăn thuộc tính mạng.

Sự cố đã được sao chép trên hai cửa sổ đang chạy máy tính khác nhau 7 64 bit. Nó dường như xảy ra sau khi gỡ cài đặt trình điều khiển bộ điều hợp mạng khỏi hệ thống khi chia sẻ được bật trên đó và sau đó cài đặt lại trình điều khiển bộ điều hợp mạng.

Tôi đã thử làm cho trình gỡ cài đặt tắt tính năng chia sẻ trong quá trình gỡ cài đặt nhưng điều này dường như bị đánh hoặc bỏ lỡ.

Ngăn thuộc tính chia sẻ mạng của cửa sổ đang làm điều gì đó đằng sau cảnh mà lệnh gọi API này không thực hiện do cài đặt chia sẻ theo cách thủ công trên bộ điều hợp hoạt động mọi lúc.

Có ai có ý tưởng gì không?

+0

Các lỗi tin nhắn/ý nghĩa bạn tìm thấy cho mã có vẻ không chính xác. Vì [Mã trong FACILITY_ITF] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms679751%28v=vs.85%29.aspx) cho biết, mã này là nguồn cụ thể. Có lẽ bạn có thể sử dụng API 'GetErrorInfo' và có được mô tả chính xác làm sáng tỏ nguồn gốc của vấn đề. –

+0

Tôi cũng gặp phải điều này. Tôi tự hỏi nếu nó có cái gì để làm với điều này? 'Kết nối được chia sẻ công khai tự động kích hoạt Tường lửa Kết nối Internet.' Có lẽ cho phép nó từ khung thuộc tính cấu hình tường lửa theo cách mà EnableSharing có thể làm việc với? –

+0

Tôi không chắc chắn nếu hotfix này có thể giúp vì nó là dành cho .NET 2.0, nhưng nó là giá trị cố gắng: http://support.Microsoft.com/kb/926997/en-us – utapyngo

Trả lời

1

tôi đã cùng một vấn đề trên cửa sổ 8.1 và kết thúc sửa chữa nó sau khi đọc: https://support.microsoft.com/kb/828807

Mã của tôi là C# nhưng tôi chắc rằng bạn có thể làm điều tương tự trong C++

// Disable ICS on any network iterfaces which may no longer be present in the system 
public void Disable_ICS_WMI() 
{ 
    ManagementScope scope = new ManagementScope("\\\\.\\ROOT\\Microsoft\\HomeNet"); 

    //create object query 
    ObjectQuery query = new ObjectQuery("SELECT * FROM HNet_ConnectionProperties "); 

    //create object searcher 
    ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query); 
    //get a collection of WMI objects 
    ManagementObjectCollection queryCollection = searcher.Get(); 

    //enumerate the collection. 
    foreach (ManagementObject m in queryCollection) 
    { 
    // access properties of the WMI object 
    Console.WriteLine("Connection : {0}", m["Connection"]); 
    try 
    { 
     PropertyDataCollection properties = m.Properties; 
     foreach(PropertyData prop in properties) 
     { 
     if (prop.Name == "IsIcsPrivate" && ((Boolean) prop.Value) == true) 
     { 
      prop.Value = false; 
      m.Put(); 
     } 
     }   
    } catch (Exception e) 
    { 
     Console.WriteLine("ex " + e.Message); 
     continue; 
    } 
    } 
} 
+0

Cảm ơn các liên kết. Vấn đề dường như đã biến mất. Tuy nhiên cần lưu ý rằng bạn vẫn cần phải gọi 'DisableSharing' sau khi gọi phương thức này. – Mygod