web-dev-qa-db-fra.com

Erreur: Une exception non gérée du type 'System.UnauthorizedAccessException' s'est produite dans mscorlib.dll

C’est la partie qui se bloque et qui me donne cette erreur, c’est lorsque j’essaie de copier un fichier dans un certain emplacement.

string startupDirectory = "C:\\Users\\Tyler\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup";
File.Copy(startupDirectory, "Startup.exe");

J'ai lu en ligne et essayé les droits d'administrateur et créé un fichier "app.manifest":

<requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />

J'ai confirmé que, dans les paramètres, le manifeste de l'application est défini sur ce fichier, mais il me donne toujours la même erreur.

J'ai aussi essayé cet événement bien que je ne pensais pas que cela fonctionnerait car c'est un répertoire et non un fichier:

File.SetAttributes(startupDirectory, FileAttributes.Normal);

Ceci est WinForms et je suis sur Windows 7, mais je veux aussi que ce soit un monde pour Windows 8+. Comment puis-je faire cela?

Merci d'avance!

6
Nullone

Essayer

public static void Copy(string sourceFileName, string destFileName);

La première surcharge est source La 2ème surcharge est la destination, je pense que la raison pourrait être ceci

File.Copy("Startup.exe",startupDirectory);

Essayez de définir les autorisations d'accès sur "Contrôle total" pour l'utilisateur .Net à partir duquel vous lisez/enregistrez les fichiers.

Pour une erreur d'accès refusé sur le serveur IIS d'un fichier particulier, procédez comme suit:

1- Goto to C:\\Users\\Tyler\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup

2- Right click on your file -> Properties -> Pop Up of User properties appears -> click on Security tab-> click on Edit -> select Users-> tick on Allow Full Control -> Click Ok

Cela résoudra sûrement le problème de l'accès refusé

Une exception UnauthorizedAccessException signifie l'une des 3 choses suivantes:

  • L'appelant n'a pas l'autorisation requise.
  • chemin est un répertoire.
  • path spécifie un fichier en lecture seule.
2
Midhun Mundayadan

Cette exception est déclenchée par une erreur Windows. Il n'a pas de code d'erreur dédié "cela n'a absolument aucun sens", il produit simplement un code d'erreur "d'accès refusé". Ce qui .NET se traduit par une exception UnauthorizedAccessException.

Le problème "n'a aucun sens" est que vous essayez de copier un répertoire directory avec une méthode de copie de fichier. Les répertoires ne sont pas des fichiers. La copie d'un répertoire nécessite la création préalable d'un nouveau répertoire, puis la copie de tous les fichiers qu'il contient. .NET a une méthode pour cela, la plupart des programmeurs C # ont tendance à penser que c'est le "mauvais" espace de noms. Il s'agit de Microsoft.VisualBasic.FileIO.FileSystem.CopyDirectory ().

Mais vous devrez réfléchir un peu plus à ce problème, il n’est évidemment pas logique d’appeler le nouveau répertoire "startup.exe". A probablement pour but de copier un fichier spécifique à partir du répertoire de démarrage, nous ne pouvons pas deviner ce que cela pourrait être.

3
Hans Passant

Essaye ça:

    File.Copy(startupDirectory, "Startup.exe", true);
    File.SetAttributes("Startup.exe", FileAttributes.Normal);
1
octavioccl

Vous pouvez exécuter Visual Studio avec des droits d'administration. (En supposant que Windows 7, faites un clic droit sur l'icône Visual Studio dans le menu de démarrage et cliquez sur "Exécuter en tant qu'administrateur")

1
Hassan.Siddiqui