Мне нужно получить доступ к сетевому пути - PullRequest
1 голос
/ 03 мая 2011

У меня есть служба Windows, и я попытался сопоставить ее с помощью pinvoke.Код прекрасно работает в консольном приложении, но не влияет на службу Windows.В соответствии с этим:

команда «net use» в службе Windows

Я должен отказаться от подхода net use и вместо этого дать соответствующие привилегии, чтобы моя служба моглаполучить доступ к UNC-пути (\ server \ share \ file-path).Как мне установить эти привилегии?Я предполагаю, что это основные привилегии Windows, которые должны быть установлены где-то.Любая помощь приветствуется.

[DllImport("NetApi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
internal static extern System.UInt32 NetUseAdd(string UncServerName, int Level, ref USE_INFO_2 Buf, out uint ParmError);

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
internal struct USE_INFO_2
{
    internal LPWSTR ui2_local;
    internal LPWSTR ui2_remote;
    internal LPWSTR ui2_password;
    internal DWORD ui2_status;
    internal DWORD ui2_asg_type;
    internal DWORD ui2_refcount;
    internal DWORD ui2_usecount;
    internal LPWSTR ui2_username;
    internal LPWSTR ui2_domainname;
}

и ...

       static void Main()
        {
            USE_INFO_2 useInfo = new USE_INFO_2();
            useInfo.ui2_remote = @"\\xx.xx.xx.xx\E$"; // "\\xx.xx.xx.xx\E$"
            useInfo.ui2_password = "********";
            useInfo.ui2_asg_type = 0;    //disk drive
            useInfo.ui2_usecount = 1;
            useInfo.ui2_username = "Admin";
            useInfo.ui2_domainname = "rendering";
            uint paramErrorIndex;
            uint returnCode = NetUseAdd(String.Empty, 2, ref useInfo, out paramErrorIndex);
            if (returnCode != 0)
            {
                throw new Win32Exception((int)returnCode);
            }
...

1 Ответ

1 голос
/ 03 мая 2011

Вы можете запустить службу Windows как пользователь домена / windows, у которого есть доступ к этому пути.

...