これは、思ったよりもはるかに難しい可能性があります。サーバー側のオブジェクトモデルからこれを実行しようとしている場合は、セッション0で実行されている可能性があります。セッション0は、サービス用の特別なWindowsセッションであり、新しいプロセスの生成を許可しません。これを回避するには、Windows APIを使用してユーザーにログインし、セッションを制御して、セッション0から抜け出す必要があります。あなたが実際にこれをしていることを指定していないので、私はこの道をこれ以上進みません。
SharePointのドキュメントライブラリに保存されているWord文書をダウンロードして、クライアント側で起動する場合は、次のコマンドを使用して文書をダウンロードして開くことができます。
ClientContext clientContext = new ClientContext("http://SharePoint/");
string serverRelativeUrlOfFile = "SharedDocuments/file.docx";
string fileDestinationPath = @"C:\Documents\file.docx";
using (FileInformation sharePointFile =
Microsoft.SharePoint.Client.File.OpenBinaryDirect(clientContext, serverRelativeUrlOfFile))
{
using (Stream destFile = System.IO.File.OpenWrite(fileDestinationPath))
{
byte[] buffer = new byte[8 * 1024];
int byteReadInLastRead;
while ((byteReadInLastRead = sharePointFile.Stream.Read(buffer, 0, buffer.Length)) > 0)
{
destFile.Write(buffer, 0, byteReadInLastRead);
}
}
}
System.Diagnostics.Process.Start(@"C:\Documents\file.docx");
編集:これはSharePoint2010クライアントオブジェクトモデルを使用していることに注意してください。サーバー側オブジェクトモデルの手順はセッション0の分離によってかなり難しくなります。要求されない限り、ここでは詳しく説明しません。
編集:コメントの後、クライアント側でファイルをダウンロードして実行するためにWebパーツを使用しようとしていることは明らかです。上記のコードはSharePoint2010クライアントオブジェクトモデルからのものですが、C#バージョンです。正しいC#バージョンを示したので、JavaScriptバージョンへの変換は簡単です。これにより、ファイルがクライアントにダウンロードされます。ファイルがダウンロードされたら、次のJavaScript/ActiveXを使用してファイルを実行します。
var objShell = new ActiveXObject("Shell.Application");
var strArguments = "";
var strDirectory = "";
var strOperation = "open";
var intShow = 1;
objShell.ShellExecute(FileLocation, strArguments, strDirectory, strOperation, intShow);
正しいパラメータが置き換えられる場所。これはInternetExplorerでのみ機能することに注意してください-この明らかに陽気に危険なActiveXは、そこにあるすべての半ばまともなブラウザによってブロックされています-そして私はIE8でのみテストしました。