8
votes

Comment puis-je modifier programmable le fichier hosts dans Windows 7 / Server 2008?

J'écris une petite utilité WPF pour gérer les entrées dans le fichier d'hôtes à des fins de développement. Comme vous le savez peut-être que le fichier hosts est protégé par le plus récent OSS (Win 7/2008 / Vista).

J'ai ajouté un manifeste à mon application pour définir la demandeExecueLevel à "requissadInistrator", comme détaillé ici (en utilisant" le moyen facile ") et dans la question connexe Hère .

Malheureusement, cela n'a malheureusement pas fonctionné pour moi. Il n'y a pas d'invite d'altitude lorsque je démarre l'application et appeler le fichier.AppendText pour le fichier d'hôtes provoque toujours un système.UnauthorizedAccessException: "Accéder au chemin" C: \ Windows \ System32 \ Drivers \ etc \ hosts 'est refusé. "

hostschanger.exe.manifest: xxx

des idées?


5 commentaires

Ainsi, l'exception lors de l'accès à des clés de registre protégés est totalement attendue si vous n'élevez pas. Je n'ai pas assez utilisé des manifestations pour me rappeler toutes les étapes, cependant, donc je ne sais pas pourquoi ce que vous avez essayé ne fonctionne pas pour vous.


Oui, l'exception est attendue ... et l'élévation devrait le résoudre, mais l'absence d'une invite indique une élévation ne se produit pas.


Je cherche un programme simple hôteschanger, mais je n'ai pas encore trouvé celui-ci


@jasondavis N'hésitez pas à attraper mon application ici: bloing.net/hostschanger


Lien mis à jour: GitHub.com/maltem-za/hostschanger


3 Réponses :


2
votes

Je ne sais pas si cela fera une différence mais que votre extrait de manifeste est légèrement différent de ma compréhension de la manière dont il devrait être (bien que cela puisse être des versions différentes): XXX

Sinon, un travail autour peut être d'une application distincte "chargeuse" que l'utilisateur commence par et qui ne démarre que votre outil de WPF réel à l'aide du verbe verbe runas comme détaillé dans < a href = "http://blogs.msdn.com/b/vistacompatteam/archive/2006/09/25/771232.aspx" rel = "NOFOollow NOREFERRER"> Ceci Publication de blog (donc processus .Startinfo.verb = "runas"; ).


6 commentaires

Malheureusement, votre extrait de manifeste n'a pas fonctionné non plus. J'avais pensé à démarrer un nouveau processus avec le verbe Runas lorsque vous avez besoin d'une modification du fichier hosts, mais cela aurait un impact au sévèrement sur la facilité d'utilisation de l'application pour l'utilisateur avec UAC activé (c.-à-d. Ce serait carrément gênant). Une invite de l'UAC au début serait meilleure. Aucune offense, mais une application Loader est un hack et je préfère l'éviter, mais merci pour l'entrée.


Donc, c'est exactement la façon dont le manifeste recherche de l'application que je travaille au travail et l'élévation fonctionne pour cela. La différence ici peut être que le nom de fichier est "app.manifest", et l'option de projet "manifeste" (sur l'onglet Application) pointe-dessus.


J'ai mes propriétés de projet définies sur le fichier manifeste. Je vais essayer de le renommer à App.Manifest ... cependant cela semble-t-il optimiste. Vous obtenez donc la demande du début de l'application? Est-ce que c'est WPF? Mon application est sans fenêtre (contrôle des utilisateurs de Trayicon et WPF uniquement), pourrait-il être un facteur?


Renommer à l'app.Manifest l'astuce - Wow. Si vous voulez poster cela comme une réponse, je vais le marquer en conséquence. Merci pour le conseil.


@bszom: puisque vous venez de répondre à un commentaire, vous devez ajouter @AserSername (ou au moins une partie du nom d'utilisateur) à votre commentaire pour vous assurer qu'il le verra. Donc, si vous ajoutez @merlyn à votre commentaire, il sera averti que je pense.


@ ho1 - merci pour la tête up :) Oui, je ne l'ai pas vu tant que vous l'avez fait @.



1
votes

Je vais prendre un coup de poignard dans le noir ici et dire qu'il s'agit d'une question de signature authentique. Je n'ai pas entendu dire que vous mentionnez quoi que ce soit sur la signature de votre candidature. En ce qui concerne ma compréhension, contrairement à Vista, dans Windows 2008/7, le seul moyen d'exécuter une application élevée est d'avoir un manifeste d'application signé qui identifie le niveau de privilège dont les besoins de l'application ont besoin. Si vous avez besoin d'aide d'aide, voici un article sur la manière de signer votre candidature: http: //msdn.microsoft.com/en-us/library/bb756995.aspx


2 commentaires

En supposant également que vous avez déjà suivi ce flux de travail, mais vous allez fournir ici pour référence ou liste de contrôle: msdn.microsoft.com/en-us/library/bb756973.aspx


Eh bien, après avoir renommé sur App.Manifest, VS notifie qu'il doit être exécuté en tant qu'administrateur afin de déboguer (comme prévu; voir le 1er lien que j'ai posté). L'application a maintenant accès à l'écriture du fichier d'hosts. En d'autres termes: l'élévation fonctionne maintenant correctement, même avec une application non signée. Je pense que l'avantage de la signature est qu'aucune intervention de l'utilisateur n'est requise pour élever, mais c'est juste une hypothèse. Merci pour l'info!



3
votes

Paraphrasé de mon commentaire précédent, transformé en une réponse:

La réponse HO1 a donné contient une application.Manifest qui est exactement la même que l'application que je travaille au travail et l'élévation fonctionne pour cela. La différence ici est que le nom de fichier est "app.manifest", et l'option de projet "manifeste" (sur l'onglet Application) pointe-dessus.


0 commentaires