[Issues] Java ProcessBuilder directory path

๐Ÿ‘ปยท2022๋…„ 2์›” 22์ผ
0

Issues

๋ชฉ๋ก ๋ณด๊ธฐ
2/4
post-thumbnail

๐Ÿ“Œ๊ฐœ์š”

์ฒด์˜จ ์ธก์ • ๊ด€๋ จํ•ด์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์‚ฌ์šฉํ•˜๋˜ ์ค‘
์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋งŽ์€ ๋ฌธ์ œ๋“ค ๋•Œ๋ฌธ์— ๊ฒฐ๊ตญ ๋‘ ํ”„๋กœ๊ทธ๋žจ์„ ๋™์‹œ์‹คํ–‰ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๋˜์—ˆ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ์€ ์„ค์น˜ ์‹œ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋กœ ์ž๋™ ์žฌ์‹คํ–‰ ๋˜๋„๋ก ์„ค์ •์ด ๊ฐ€๋Šฅํ•œ๋ฐ
๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์€ ์„ค์น˜ํŒŒ์ผ๋„ ๋”ฐ๋กœ ์—†๊ณ  ์„ค์ •์ด ๋ถˆ๊ฐ€ํ–ˆ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ๋„ ๊ฐ™์ด ์‹คํ–‰ํ•ด์ฃผ๋ ค ํ–ˆ๋‹ค.
์›๋ž˜ ProcessBuilder()๋ฅผ ํ†ตํ•ด exeํŒŒ์ผ์„ ์‹คํ–‰ํ•ด์„œ ์ผ์—ˆ๋Š”๋ฐ
ํ”„๋กœ์ ํŠธ์˜ root์˜ ๊ฒฝ๋กœ๋ฉด ๋ฐ”๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ๋ฐ
ํ•˜์œ„ ํด๋” ์•„๋ž˜์— ์žˆ๋Š” exeํŒŒ์ผ์€ ์‹คํ–‰๋˜์ง€ ์•Š์•˜๋‹ค.

์‚ฌ์‹ค root ๊ฒฝ๋กœ์— ํ”„๋กœ๊ทธ๋žจ์„ ๋„ฃ๊ณ  ๋ฐ”๋กœ ์จ๋„ ๋˜์ง€๋งŒ,
์ด๊ฒƒ์ €๊ฒƒ ์ฐธ์กฐํ•˜๋Š” dllํŒŒ์ผ ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ๋งŽ์•„ ๋ณด๊ธฐ ์‹ซ๋‹ค๋Š” ์ด์œ ๋กœ ๋˜ ๊ฐ•๋ฐ• ์ฆ์ƒ์ด.. ๐Ÿ˜‚

ProcessBuilder์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ณง๋ฐ”๋กœ ์„ค์ • ํ•  ์ˆ˜๋Š” ์—†์—ˆ๋‹ค.

directory๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” [ cd ] ๋ช…๋ น์–ด๋Š” ์‰˜ ๋‚ด์žฅ ๋ช…๋ น์–ด์ด๊ธฐ ๋•Œ๋ฌธ์—
๋ณ„๊ฐœ์˜ ์‹คํ–‰ํŒŒ์ผ๋กœ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•œ๋‹ค..!
๋ฌด์Šจ ์†Œ๋ฆฌ์ธ์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ๊ฒ€์ƒ‰์‹œ์ž‘!!


๐Ÿ“Œ๊ฐœ๋ฐœํ™˜๊ฒฝ

  • Windows 10 Pro
  • Eclipse Mars 2.0 (x32)
  • Java 8

๐Ÿ“Œํ•ด๊ฒฐ๋ฐฉ์•ˆ

๐Ÿ“ƒ ProcessBuilder().directory()

ProcessBuilder ๊ฐ์ฒด์—๋Š” directory(File file) ๋ฉ”์†Œ๋“œ๊ฐ€ ์กด์žฌํ•œ๋‹ค.
directory ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ์‹คํ–‰ํ•  ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
๋ผ๊ณ  ํ•˜๋Š”๋ฐ ์•ˆ๋จนํžŒ๋‹ค..^^

์ถ”๊ฐ€์ ์ธ cmd ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์žก์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

List ๊ฐ์ฒด์— "rundll32.exe", "url.dll,FileProtocolHandler", "execute file name" ์ปค๋งจ๋“œ๋ฅผ ๋‹ด์•„ ProcessBuilder์˜ ์ปค๋งจ๋“œ์— ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ directory์— ํ˜„์žฌ ์œ„์น˜ ๋ฐ ํ•˜์œ„ํด๋”์˜ ๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ•ด์ฃผ๋ฉด ์•„์ฃผ ์ž˜ ์‹คํ–‰๋œ๋‹ค.

String path = System.getProperty("user.dir");
  
List<String> cmd = new ArrayList<String>();
cmd.add("rundll32.exe");
cmd.add("url.dll,FileProtocolHandler");
cmd.add("EXECUTE FILE NAME");
  
new ProcessBuilder(cmd).directory(new File(path + "SUB_FOLDER")).start();

๐Ÿ“Œ ๊ฒฐ๋ก 

์‚ฌ์‹ค cmd ๋ช…๋ น์ด๋‚˜ Window ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์•ก์„ธ์Šค๋Š” ๋ด๋„ ๋ด๋„ ๋ชจ๋ฅด๊ฒ ๋‹ค.. :(
processBuilder() ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•˜์œ„ํด๋”๊นŒ์ง€ ํ•œ๋ฒˆ์— ์ง€์ •๋  ๊ฒƒ์ด๋ผ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ,
์ƒ๊ฐ๋ณด๋‹ค ๊ทธ๋ฆฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ˜๋Ÿฌ๊ฐ€์ง„ ์•Š์•˜๋‹ค..

rundll32.exe ๊ด€๋ จ ์ฐธ๊ณ  ์ž๋ฃŒ
>>rundll32.exe ํ”„๋กœ์„ธ์Šค<<

๊ฒฝ๋กœ์„ค์ • ๊ด€๋ จ ์ฐธ๊ณ  ์ž๋ฃŒ
>> Setting working directory for ProcessBuilder is not working By stackoverflow <<

profile
Software Developer

0๊ฐœ์˜ ๋Œ“๊ธ€