Web App Using System Command To Write File

Howdy,
I am trying to use system("command") to execute an external program (.exe running on Windows) which writes out files. The app works fine normally. I run the code as an app, I press a button, it executes system("command"), this "command" runs external_program.exe, external_program.exe writes out a file, and everything works as intended. It is only when it is used as a webapp that it does not work. The external_program.exe dose not write out successfully when being executed by a webapp using system("command").
I can have the webapp output the exact system "command" its trying to run, copy that command, run that command in a command prompt, and it works as intended. So I know it has to do something with the webapp.
I ran the following matlab code:
getenv('USERNAME')
getenv('programdata') %directory for program specific data
getenv('appdata') %directory for user specific data (roaming)
getenv('localappdata') %directory for user specific data (local)
getenv('userprofile') %current user profile folder
I get the following response when it is ran as an app:
ans = 'owner123'
ans ='C:\ProgramData'
ans ='C:\Users\owner123\AppData\Roaming'
ans ='C:\Users\owner123\AppData\Local'
I get the following response when it is ran as an webapp:
ans = 'MwWebAppWorkerR2020a'
ans ='C:\ProgramData'
ans ='C:\Users\MwWebAppWorkerR2020a\AppData\Roaming'
ans ='C:\Users\MwWebAppWorkerR2020a'
I thought maybe this is a permission issue. So I moved the external_program.exe file to 'C:\Users\MwWebAppWorkerR2020a', change the ownership of external_program.exe to 'MwWebAppWorkerR2020a', gave "full control" (permission wise) for "everybody" including the following users: "MwWebAppWorkerR2020a", "MwWebAppServerR2020a", "MwWebAppAuthorsR2020a".
After doing this, I still can not get the webapp to use system("command") to execute external_program.exe properly where it writes out files successfully.
I'm thinking maybe I didn't do the permissions properly or when the external_program.exe tries to write out it can not write because how it is ran with permission incorrectly. Any advice on how to overcome this? Or how can I get the webapp to run the system("command") successfully like how it does in app form?

댓글 수: 5

Mario Malic
Mario Malic 2020년 10월 30일
Try giving full control to the folder your program writes in.
Kev K
Kev K 2020년 10월 30일
Thank you, Mario, for your reply. I have double checked the folder has full control
I have given full control, and it still can't write out to the folder. Any other idea what it could be?
Mario Malic
Mario Malic 2020년 10월 30일
Alright, can you check what is current directory (cd) of the web app when it runs (sorry, I have never worked with it, so this might look like a silly question)? At least in my case, temporary/session files from the external program are generated in cd before they are saved to the specified folder. Are you using fullpaths in system command?
Kev K
Kev K 2020년 10월 31일
Hi Mario,
Thank you for your response and help Mario. I figured it out, but before I explain, I will answer your questions.
I was using full paths and enviroment variables. So for example, I used getenv('userprofile') in the matlab code. The external program was writing out to this specific path as well.
I didn't realize the external program was using /C as a temp as well use /c/windows/fonts. Since the "MwWebAppWorkerR2020a" user was executing the external_program.exe, it was trying to access files and folders that only an admin should be able to. So I gave the user "MwWebAppWorkerR2020a" full control to all of /C. This allowed the external_program.exe to do its thing as well the rest of my code which uses the files it generates.
Of course this is probably a security risk, but for my use case, this will only be temporary as it will eventually be turn into a restful api.
Thanks agian Mario for helping and getting me to think outside the box.
Kev
Mario Malic
Mario Malic 2020년 10월 31일
That's great! You're welcome.
It would be great if you could just post a reference to your comment in answer section and accept it, so it's clear for other people who may encounter an issue similar to yours.

댓글을 달려면 로그인하십시오.

 채택된 답변

Kev K
Kev K 2020년 12월 13일

0 개 추천

https://www.mathworks.com/matlabcentral/answers/630989-web-app-using-system-command-to-write-file#comment_1100734

댓글 수: 1

Mario Malic
Mario Malic 2020년 12월 13일
편집: Mario Malic 2020년 12월 13일
I wanted to make an update on this. It is possible to have a better control of the program you're calling with System.Diagnostics.Process. There's a property called StartInfo.WorkingDirectory that could be really useful in your case. There's an example here, without WorkingDirectory.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Deep Learning Toolbox에 대해 자세히 알아보기

질문:

2020년 10월 30일

편집:

2020년 12월 13일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by