J'ai besoin d'un moyen de trouver un dossier pour une application portable qui peut toujours être trouvé s'il existe (et sinon, il peut être créé), et qui est accessible à l'utilisateur et à l'application, de sorte que les fichiers qu'il contient puissent être modifiés et ajoutés par l'utilisateur et lus / modifiés par l'application (les ressources intégrées ne résolvent donc pas le problème).

Mon problème est que je ne sais pas où ce dossier / répertoire par défaut devrait être. Doit-il se trouver dans le même dossier que l'application .exe? Dois-je utiliser un SpecialFolder? Ou tout autre chose?

C'est vraiment plus une question sur les pratiques standard pour les applications portables en C # et .NET, plutôt qu'une question sur la façon de l'implémenter directement (bien que des liens vers les classes / codes spécifiques mentionnés seraient toujours très utiles).

Mes pensées jusqu'à présent:

  • Je préfère l'idée qu'il soit placé dans le même répertoire que le .exe, comme si le dossier de l'application était déplacé, l'important les fichiers peuvent toujours être facilement localisés manuellement. Cependant, si l'utilisateur devait déménager l'application à Program Files, ou quelque chose (qui ne semble pas trop déraisonnable?), je crains que les fichiers ne nécessitent Des privilèges d'administrateur pour modifier / ouvrir, ce qui interrompra l'application.

  • L'utilisation d'un répertoire d'utilisateurs, ou similaire, fonctionnerait également, mais je ne sais pas si c'est une pratique standard acceptable pour une application portable être en train d'écrire dans les dossiers des utilisateurs (me semble un peu bizarre, personnellement). Mais je ne savoir s'il existe un moyen de rendre cela plus agréable au goût?

Toutes les suggestions seraient grandement appréciées.

-1
Gebodal 28 août 2020 à 19:54

3 réponses

Meilleure réponse

Sous Windows, Program Files appartient au système d'exploitation, pas aux utilisateurs ni aux programmes d'application. Il s'agit d'un emplacement sécurisé utilisé par le système d'exploitation pour stocker des données tierces, y compris des binaires. Les utilisateurs standard n'ont pas la possibilité d'y écrire des données.

Vous ne devez pas essayer de contourner cela pour permettre aux utilisateurs ou aux applications tierces de modifier les données là-bas, cela permet à des tiers d'installer des keyloggers, des backdoors, de nouveaux comptes, des mineurs de bitcoin, des chevaux de Troie, des rootkits et des ransomwares dans votre système d'exploitation. Ne fais jamais ça.

Même si vous faisiez cela; ça ne marchera pas. Lorsque les utilisateurs désinstallent des applications, les données de Program Files sont supprimées. Si l'utilisateur ou un utilitaire effectue une réparation de disque, les données des fichiers programme sont supprimées et restaurées à partir d'un point de sauvegarde. Toutes les données que vous pourriez y stocker seraient bientôt supprimées. Si votre application est conteneurisée, vos données seront supprimées à chaque fois que l'utilisateur ferme l'application.

Il est possible de stocker des données dans Program Files si elles sont en lecture seule. Si votre application a besoin d'une sorte de données de recherche permanentes; dites un dictionnaire de mots qui ne change jamais, stockez-le dans Program Files. Il sera supprimé lorsque l'application est supprimée et restauré lorsque l'application est restaurée.

Si vos utilisateurs souhaitent stocker des données et s'attendent à ce qu'elles soient là la prochaine fois qu'ils exécutent l'application ou après avoir désinstallé l'application, vous devez les stocker dans l'un des SpecialFolder s. Laquelle? Cela dépend entièrement de qui vous voulez avoir accès aux données et de la manière dont ils les obtiendront. Est-ce partagé? Voulez-vous utiliser une boîte de dialogue de fichier? Vous n'avez pas expliqué ces choses, nous ne pouvons donc pas vous répondre.

Aucun de ces dossiers n'est masqué; si vous souhaitez masquer les données de l'utilisateur et des autres applications souhaitées Stockage isolé.

Qu'entendez-vous par «application portable»? Voulez-vous dire une application sur une clé USB que vous pouvez brancher sur n'importe quelle machine aléatoire, exécuter votre application, stocker des données, débrancher la clé USB, la brancher sur une autre machine, exécuter à nouveau votre application et vos données sont toujours là? Vous recherchez une machine virtuelle; créer une application Windows ordinaire, en stockant les données dans SpecialFolders. Lorsque votre application est terminée, créez une machine virtuelle sur une clé USB et installez-y votre application. C'est ainsi que sont créés les utilitaires de disque portable et les navigateurs Web. Faire cela demande beaucoup de travail et vous devez d'abord faire fonctionner votre programme normalement.

1
Dour High Arch 29 août 2020 à 19:19

Il s'agit de la pratique standard pour l'utilisation des répertoires de programmes. Tout ce que vous avez à faire est de prendre le dossier contenant le fichier exécutable et de travailler avec. Par exemple, créez le nombre requis de nouveaux dossiers et placez-y des objets. Même après que l'utilisateur a déplacé le répertoire principal avec le fichier exécutable, votre programme pourra trouver le nouveau chemin et tous les fichiers qu'il contient sans aucun problème.

(Je ne peux pas placer cela comme commentaire, car SO exige plus de réputation de ma part lol)

-1
Nikolay B. 28 août 2020 à 17:30

Si vous parlez de l'emplacement des fichiers pour une application largement distribuée, sous Windows, je pense que Program Files (x86) serait un bon endroit à utiliser, et si vous parlez de distributions Linux, alors / etc est normal. Une réalisation personnelle que j'ai dû faire dans le développement professionnel est de reconnaître que ce sont des endroits que je considère normalement comme «sacrés» ou «pour de vrais développeurs» et JE SUIS un vrai développeur.

S'il ne s'agit que d'une application personnelle à partager avec quelques personnes ou quelque chose du genre, je pense que l'emplacement du .exe est un emplacement de stockage parfaitement adapté.

0
Carson 28 août 2020 à 17:52