12
votes

VBA: Comment exécuter une autre application à partir d'un accès MS

J'essaie d'obtenir ce problème, et il semble que je ne trouve pas la solution au problème n'importe où. Voici la première partie: ​​La commande VBA Shell retourne toujours "fichier non trouvé" Dans cette question, il ne trouvait pas l'application dans le dossier% Appdata% pour une raison quelconque, probablement un réglage de sécurité.

J'ai depuis déplacé l'outil d'importation vers le même répertoire que je stocke la base de données, avec le petit espoir de l'obtenir pour fonctionner correctement.

Mon objectif est de cliquer sur un bouton dans l'accès MS et d'exécuter directement mon outil d'importation. En ce moment, je l'ouvre le dossier qui détient l'outil. Cela fonctionne sur ma machine de développement qui comporte des privilèges administrateurs, mais ne fonctionne pas sur d'autres machines sans administrateur privilégié. Le code ressemble maintenant à quelque chose comme ce qui suit: xxx

Ceci permet au dossier qui contient le fichier à ouvrir, mais uniquement sur les comptes de la machine qui ont des privilèges d'administrateur complet. Lorsque vous allumez ceci sur un compte de machine qui a moins de privilèges complets, cela ne fait simplement rien.

J'ai également essayé ce qui suit: xxx

cette section "Semble" travailler en ce qu'il charge l'application "myTool.exe" lorsque je regarde le gestionnaire de processus. Cependant, après quelques secondes (peut-être 20), une boîte de dialogue apparaît indiquant que l'application "myTool.exe" a cessé de fonctionner.

Une chose à noter ici est que j'ai des privilèges administrateurs sur ma machine de développement , mais j'ai tous les privilèges sur ma machine à domicile. Sur ma machine à domicile, ce deuxième code fonctionne sans problème. Dans ma machine de développement, il se bloque, tandis que sur une machine utilisateur restreinte, elle ne fait rien du tout.

Y a-t-il des suggestions sur la manière d'ouvrir cette application à partir d'un accès MS tout en utilisant moins que ... Privilèges d'administration? Soit pour exécuter l'application directement ou pour ouvrir au moins le dossier dans lequel ladite application réside.

merci!

P.s. J'ai essayé à la fois de la Shellandwait et du code de runapplication trouvé sur Stackoverflow, ce qui ne fonctionne pas dans ce cas.


0 commentaires

4 Réponses :


1
votes

Je viens de jouer avec http://www.mombu.com/microsoft/scripting-wsh/t-vista-uac-problem-with-wscripthell-method-1508617.html . J'ai essayé ceci sur Windows 7 Home PC.

Set objShell = CreateObject("Shell.Application")
myPath = Environ("ProgramFiles(x86)") & "\mytool"
Set objFolder = objShell.Namespace(myPath)
Set objFolderItem = objFolder.ParseName("mytool.exe")
objFolderItem.InvokeVerb "runas"


7 commentaires

Cela fonctionnera-t-il avec VBA? Je sais que beaucoup d'instructions VB dans l'ensemble n'ont pas de contreparties dans VBA.


Je l'ai essayé dans VBA, mais je ne sais pas si cela fonctionnera dans votre situation. Tout ce que je peux dire, c'est qu'il a couru dans VBA sur mon PC à la maison.


Je reçois une erreur de "méthode ou datamember non trouvé" sur la méthode objshell.namespace (). De plus, je ne sais pas quoi de dimension d'Objfolder et d'ObjfolderItem comme. Actuellement, ils sont dimensionnés comme variant.


Je ne peux pas reproduire votre erreur, mais je vais regarder un peu plus longtemps. Surtout, vous pouvez dimensionner les choses commençant par Obj comme objet. Cependant, comme il s'agit d'un test, vous pouvez ignorer le dimensionnement pour l'instant.


Pouvez-vous définir une référence à Microsoft Shell Controls and Automation (Shell32) selon msdn.microsoft.com/en-us/library/windows/desktop/... ? Vous pouvez alors avoir Dim Objshell comme shell et voir si l'espace de noms est disponible dans IntelliSense. Vous pouvez également vérifier si vous utilisez objshell.namespace ("c: \ Quelque \ dossier") fonctionne.


Impossible d'ajouter des références dans VBA sur l'accès MS. Au moins, je ne peux pas sembler trouver une option pour le faire n'importe où. Malheureusement, cela ne me semble pas également possible de charger ma base de données d'accès dans Visual Studio.


Laissez-nous Continuer cette discussion en chat



0
votes

vérifier xxx

avec un autre exécutable. Cela peut être un problème avec votre outil.


0 commentaires

5
votes

J'utilise toujours shellexecute code> de l'API Windows lorsque j'ai besoin d'exécuter quelque chose dans VBA.
Aussi loin que je sache, cela fonctionne également sur des machines sans privilèges complets.

Exemple: P>

'run executable
ShellEx "c:\mytool.exe"

'open file with default app
ShellEx "c:\someimage.jpg"

'open explorer window
ShellEx "c:\"


1 commentaires

J'ai utilisé cette méthode plusieurs fois et j'ai quelque chose à noter - appeler la coquille ne met pas en pause les threads d'accès MS. Il appelle simplement la coquille, et puisqu'il ne tient pas à suivre si le processus de la coquille est terminé, il continuera à exécuter même si le programme décortiqué est toujours en cours d'exécution.



2
votes

Suivez ce lien

Access MS: lancez une application à partir de l'accès 2003 / XP / 2000/97 p>

Voici un exemple d'exécution d'une application dans MS Access P>

Private Sub Command1_Click()
Dim myPath As String
myPath = "C:\Program Files\mytool\mytool.exe"
Call Shell(myPath , 1)
End Sub


0 commentaires