@@ -45,21 +45,34 @@ def self.os
45
45
def self . symlink ( old_path , new_path )
46
46
return FileUtils . ln_s ( old_path . to_s , new_path . to_s ) unless RUBY_PLATFORM =~ /mswin32|cygwin|mingw|bccwin/
47
47
48
+ op = old_path
49
+ orp = old_path . realpath
50
+ STDERR . puts "Old path #{ op } #{ op . exist? } "
51
+ STDERR . puts "Old realpath #{ orp } #{ orp? } "
52
+
48
53
# windows mklink syntax is reverse of unix ln -s
49
54
# windows mklink is built into cmd.exe
50
55
# vulnerable to command injection, but okay because this is a hack to make a cli tool work.
51
- stdout , stderr , exitstatus = Open3 . capture3 ( 'cmd.exe' , "/c mklink /D #{ new_path } #{ old_path } " )
56
+ stdout , stderr , exitstatus = Open3 . capture3 ( 'cmd.exe' , "/C mklink /D #{ new_path } #{ old_path . realpath } " )
57
+ STDERR . puts stdout
58
+ STDERR . puts stderr
59
+ return exitstatus if new_path . exist?
60
+
61
+ STDERR . puts "initial try failed, trying short runas"
62
+
63
+ stdout , stderr , exitstatus = Open3 . capture3 ( 'runas.exe' , "/user:administrator" , "mklink /D #{ new_path } #{ orp } " )
64
+
52
65
STDERR . puts stdout
53
66
STDERR . puts stderr
54
67
return exitstatus if new_path . exist?
55
68
56
- STDERR . puts "initial try failed, trying elevated "
69
+ STDERR . puts "initial try failed, trying long runas "
57
70
58
- stdout , stderr , exitstatus = Open3 . capture3 ( 'runas.exe' , "/user:administrator" , "cmd /C mklink /D #{ new_path } #{ old_path } " )
71
+ stdout , stderr , exitstatus = Open3 . capture3 ( 'runas.exe' , "/user:administrator" , "cmd /C mklink /D #{ new_path } #{ orp } " )
59
72
60
73
STDERR . puts stdout
61
74
STDERR . puts stderr
62
- return exitstatus
75
+ exitstatus
63
76
end
64
77
end
65
78
end
0 commit comments