We help IT Professionals succeed at work.

VBScript: WScript.Shell error "No application is associated with the specified file for this operation.

sndip
sndip asked
on
On some computers (Vista with MS Word 2007), I am getting "No application is associated with the specified file for this operation." when using the code attached.  The file association is exists and when I double click on the file in windows explorer, it opens up in MS Word successfully.  When looking at the file list in Windows Explorer, the ".doc" have a file type of "DOC File".  On computers that do work, the file type is listed as "Microsoft Office 97 - 2003 Document".

I tried importing HKCU\Software\Microsoft\Windows\current version\Explorer\File Ext\.doc keys from working system and re-associating the ".doc" extension to no avail.  

Any ideas would be greatly appreciated.


<%@ Language=VBScript %>
<HTML>
<HEAD>

<script language="VBScript">
	function ShellOpenFile(sFilePathAndName) 
	
		sFilePathAndName = document.getElementById("filepath").value
	
		'on error resume next
		Dim WshShell
		set WshShell = CreateObject("WScript.Shell")
		
		window.status = "Opening File: " & sFilePathAndName
		
		WshShell.Run chr(34) + sFilePathAndName + chr(34)
		
		set WshShell = nothing
	End function	
</script>
	
</HEAD>
<BODY width="500">
<table>
<tr><td width="100%">
		<input type="text" id="filepath" name="filepath" width="100%" value="c:\test.doc">&nbsp;<a href="#" onclick="ShellOpenFile('')">Open File</a>
</td></tr>
</table>
</BODY>
</HTML>

Open in new window

Comment
Watch Question

Tech Lead (Windows), Endpoint Device Management Services
Commented:
Hi sndip,

I can't tell you why this is happening, but if you run Word with the doc as an argument, that should mitigate the problem:

WshShell.Run "WinWord.exe " & chr(34) + sFilePathAndName + chr(34)


If the script has to open multiple filetypes you can check first if it is a Word file:

If LCase(Right(sFilePathAndName, 4)) = ".doc" Or LCase(Right(sFilePathAndName, 5)) = ".docx" Then
    WshShell.Run "WinWord.exe " & chr(34) + sFilePathAndName + chr(34)
Else
    WshShell.Run chr(34) + sFilePathAndName + chr(34)
End If


Hope this helps,
Daz.

Author

Commented:
Although I am still curious as to "why", your solution will work for me.  Thanks