SORU
17 Kasım 2008, PAZARTESİ


Nasıl bir ağ paylaşımına bağlanırken kullanıcı adı ve parola sağlamanız

Geçerli kullanıcı (benim durumumda, bir ağ hizmeti kullanıcı etkin) haklarına sahip bir ağ paylaşımına bağlanırken, adı ve şifre sağlanacak.

Win32 fonksiyonları (mpr.dll WNet* ailesi) ile bunu nasıl biliyorum, ama bunu yapmak istiyorum .Net (2.0) işlevi.

Seçeneklerin ne?

Belki biraz daha fazla bilgi yardımcı olur

  • Kullanım örneği windows servis, ASP.NET bir uygulama değil.
  • Hizmet paylaşımında hiçbir hakları olan bir hesap altında çalışıyor.
  • Kullanıcı hesabı paylaşmak için gerekli istemci tarafında bilinmemektedir.
  • İstemci ve sunucu aynı etki alanının üyesi değil.

CEVAP
29 Temmuz 2009, ÇARŞAMBA


Mark Brackett'kendi benim hızlı uygulama yaptım o kadar çok s cevap. ben sevdim Burada başkasının acele gerekir:

public class NetworkConnection : IDisposable
{
    string _networkName;

    public NetworkConnection(string networkName, 
        NetworkCredential credentials)
    {
        _networkName = networkName;

        var netResource = new NetResource()
        {
            Scope = ResourceScope.GlobalNetwork,
            ResourceType = ResourceType.Disk,
            DisplayType = ResourceDisplaytype.Share,
            RemoteName = networkName
        };

        var userName = string.IsNullOrEmpty(credentials.Domain)
            ? credentials.UserName
            : string.Format(@"{0}\{1}", credentials.Domain, credentials.UserName);

        var result = WNetAddConnection2(
            netResource, 
            credentials.Password,
            userName,
            0);

        if (result != 0)
        {
            throw new Win32Exception(result, "Error connecting to remote share");
        }   
    }

    ~NetworkConnection()
    {
        Dispose(false);
    }

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing)
    {
        WNetCancelConnection2(_networkName, 0, true);
    }

    [DllImport("mpr.dll")]
    private static extern int WNetAddConnection2(NetResource netResource, 
        string password, string username, int flags);

    [DllImport("mpr.dll")]
    private static extern int WNetCancelConnection2(string name, int flags,
        bool force);
}

[StructLayout(LayoutKind.Sequential)]
public class NetResource
{
    public ResourceScope Scope;
    public ResourceType ResourceType;
    public ResourceDisplaytype DisplayType;
    public int Usage;
    public string LocalName;
    public string RemoteName;
    public string Comment;
    public string Provider;
}

public enum ResourceScope : int
{
    Connected = 1,
    GlobalNetwork,
    Remembered,
    Recent,
    Context
};

public enum ResourceType : int
{
    Any = 0,
    Disk = 1,
    Print = 2,
    Reserved = 8,
}

public enum ResourceDisplaytype : int
{
    Generic = 0x0,
    Domain = 0x01,
    Server = 0x02,
    Share = 0x03,
    File = 0x04,
    Group = 0x05,
    Network = 0x06,
    Root = 0x07,
    Shareadmin = 0x08,
    Directory = 0x09,
    Tree = 0x0a,
    Ndscontainer = 0x0b
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Autocar

    Autocar

    11 Mart 2006
  • ChasesAndCrashes

    ChasesAndCra

    31 Temmuz 2009
  • hidetake takayama

    hidetake tak

    3 Mart 2009