2010-04-24 4 views
0

Je développe une application de contrôle à distance où un client (page aspx dans un navigateur) peut demander à un serveur de "lancer un bloc-notes" (à des fins de test, pour de vrai la vie, éteindre une ampoule, etc.). J'ai donc créé une DLL avec une fonction simple pour lancer le bloc-notes (côté serveur) et j'ai déposé cette DLL dans le dossier bin racine.Exécuter une fonction dll dans ASP.Net Bin ne fonctionne pas, II7

Cela a fonctionné correctement lorsque la page aspx s'exécute sous le serveur de développement ASP.NET (lancé à partir de Visual Studio). Mais quand j'ai testé la même page ASPX sous un navigateur FireFox, cela ne fonctionnait pas (lancer le bloc-notes) même si elle appelait la même fonction (j'ai fait un pas dans le débogueur).

Est-ce un problème de permission? Comment puis-je configurer cela dans le gestionnaire IIS, ou mieux encore dans web.config?

Aidez-nous s'il vous plaît.

+0

Bonjour, avez-vous résolu votre problème? Je suis coincé dans la même chose. – BrOSs

Répondre

2

Oui, cela ressemble à un problème d'autorisation.

Le pool d'applications dans IIS 7 sur lequel s'exécute votre site utilise probablement l'identité par défaut, qui est la plus restrictive. Vous pouvez modifier l'identité dans le Gestionnaire des services Internet en cliquant avec le bouton droit sur le pool d'applications (probablement appelé DefaultAppPool) et en sélectionnant Paramètres avancés. De là, changez la valeur d'identité en service local ou service réseau. Si aucun de ces travaux, rendant le système local devrait permettre à votre page de fonctionner.

Je suppose que le serveur Web intégré Visual Studio s'exécute dans le contexte du compte avec lequel vous êtes connecté sur la machine, qui a probablement beaucoup plus de droits.

+0

Merci Chris. Votre suggestion m'a donné une bonne direction. J'ai fait ce que vous avez suggéré en définissant le defaultAppPool à LocalSystem Identity et vérifié que le site Web était en cours d'exécution sous defaultAppPool. Toutefois, il ne lance toujours pas le Bloc-notes.Y at-il quelque chose que je devrais faire pour grand ASP.NET droit puisque j'essaye d'exécuter une DLL qui devrait être manipulée par ASP.NET? –

+1

Ce qu'il serait bon de faire ensuite est de tenter de déterminer s'il s'agit toujours d'un problème d'autorisation ou de votre méthodologie de test. Je suppose que vous essayez de lancer le Bloc-notes parce que c'est une indication visible que votre code «interrupteur de lumière» fonctionne. Je remplacerais le code qui lance Notepad avec quelque chose d'autre qui peut montrer que cela fonctionne, mais n'interagit pas avec le bureau ou essaie de lancer des programmes avec une interface utilisateur visible. Peut-être que vous pouvez essayer d'écrire dans l'un des journaux d'événements Windows ou d'écrire dans un fichier texte à la racine du site. Si vous pouvez réussir l'une de ces deux choses, les autorisations ne sont plus un problème. –

0

Quand vous dites:

il ne fonctionne pas (lancer le bloc-notes)

vous l'entendez Avez par une exception ou vous ne voyez pas une fenêtre de bloc-notes ouvert. Si c'était un problème d'autorisations, je m'attendrais à ce que vous obteniez une exception. Chris a raison quand il dit:

Le pool d'applications dans IIS 7 qui votre site est en cours d'exécution est probablement sous en utilisant l'identité par défaut, ce qui est la plus restrictive.

et

Je suppose que le Visual Studio intégré exécute le serveur Web dans le contexte de le compte que vous êtes connecté avec le la machine, qui a probablement beaucoup plus de droits.

et s'il s'agit d'un problème d'autorisations, il a raison. Toutefois, l'utilisateur sous lequel vous exécutez (lorsque vous ne déboguez pas dans Visual Studio) ne peut probablement pas accéder au bureau de l'utilisateur connecté. Peut-être que vous devriez essayer votre test avec une application qui n'a pas besoin d'interagir avec le bureau.

+0

Merci d'avoir répondu. Le code s'est exécuté sans erreur mais le bloc-notes n'a pas été lancé. L'objectif de ce code est d'avoir l'ordinateur serveur exécute une DLL demandée à partir d'un client. Je vise à allumer et éteindre un périphérique matériel comme un interrupteur d'éclairage. –

Questions connexes