2017-08-23 5 views
0

J'ai un ConsoleApp (pas asp.net) qui prend les fichiers des répertoires (l'application fonctionne sur Windows Server 2012). L'application fonctionne très bien avec les dirs locaux et même les répertoires partagés (par exemple "\\ MyShare \ dest"). Cependant, quand je Mappez le partage (de « \\ MyShare à X :) j'obtenirImpossible d'accéder au lecteur réseau mappé

DirectoryNotFoundException.

Je dois mapper le lecteur parce que certains des fichiers dépassent les 260 lettres limitent . de plus, quand je déboguer mon application sur mon pc, je ne suis pas une erreur lors de l'accès au lecteur mappé

Merci d'avance pour toute aide :)

PS. Je l'ai vu d'autres postes que le problème est l'application d ne s'exécutent pas comme les bons privilèges d'utilisateur. Mon application fonctionne avec mes informations d'identification, donc la carte existe pour mon utilisateur ..

EDIT: J'ai fait une petite contournement avec votre aide et cela a fonctionné. Au lieu de créer un lecteur réseau mappé i utilisé la commande mklink et il a fait un raccourci pour ma part:

mklink/D c: \ MyShortCut \\ MyShare

Merci pour l'aide tout le monde

+0

Exécutez-vous votre application en tant que tâche planifiée? – MatSnow

+0

est UAC utilisé? courez-vous sans surveillance, ou de VS? comment accédez-vous et utilisez-vous les fichiers et répertoires (code inclus). sinon, cela devrait aller à serverfault.stackexchange.com – dlatikay

+0

Service Windows @MatSnow, l'application s'exécute toujours – user8506804

Répondre

0

Si j'ai bien compris la question et les commentaires, le lecteur mappé n'est pas accessible car le mappage n'est pas visible pour l'application. À ma connaissance, il est possible de se connecter par programmation au partage en utilisant la plate-forme invoke, plus précisément les deux fonctions et la structure suivantes.

[DllImport("Mpr.dll")] static extern int WNetUseConnection(
    IntPtr hwndOwner, 
    NETRESOURCE lpNetResource, 
    string lpPassword, 
    string lpUserID, 
    int dwFlags, 
    string lpAccessName, 
    string lpBufferSize, 
    string lpResult 
); 

[DllImport("Mpr.dll")] static extern int WNetCancelConnection2(
    string lpName, 
    int dwFlags, 
    bool fForce 
); 

[StructLayout(LayoutKind.Sequential)] class NETRESOURCE 
{ 
    public int dwScope = 0; 
    public int dwType = 0; 
    public int dwDisplayType = 0; 
    public int dwUsage = 0; 
    public string lpLocalName = ""; 
    public string lpRemoteName = ""; 
    public string lpComment = ""; 
    public string lpProvider = ""; 
} 

Les fonctions sont documentées here et here; this et this sont possiblement liés.