On Sunday, 6 March 2016 at 03:13:23 UTC, 岩倉 澪 wrote:
I'm creating a small installation script in D, but I've been
having trouble getting shortcut creation to work! I'm a linux
guy, so I don't know much about Windows programming...
[...]
Any help would be highly appreciated as I'm new to Windows
programming in D and have no idea what I'm doing wrong!
If you don't want to mess with the Windows API then you can
dynamically create a script (I do this in CE installer):
void createLnk(string exeName, string displayName)
{
import std.process: environment, executeShell;
import std.file: remove, exists;
import std.random: uniform;
import std.conv: to;
string vbsName;
do vbsName = environment.get("TEMP") ~ r"\shcsh" ~
uniform(0,int.max).to!string ~ ".vbs";
while (vbsName.exists);
string vbsCode = "
set WshShell = CreateObject(\"WScript.shell\")
strDesktop = WshShell.SpecialFolders(\"Desktop\")
set lnk = WshShell.CreateShortcut(strDesktop +
\"\\%s.lnk\")
lnk.TargetPath = \"%s\"
lnk.Save
";
File vbs = File(vbsName, "w");
vbs.writefln(vbsCode, displayName, exeName);
vbs.close;
executeShell(vbsName);
vbsName.remove;
}