我的setup.exe所在的文件夹包含一个子文件夹CAL
,其文件名称类似于xyz1234.cal
- 它们的名称因客户而异。必须将这些文件复制到目标目录中的文件夹CAL
中。
所以我创建了一个CustomAction和一个使用File.Copy()
函数的C#dll。我的C#函数接收字符串srcDir
和destDir
作为参数,例如D:\installation\CAL
和C:\MyApp\CAL
。
但是,当我使用Directory.Exists(srcDir)
检查文件夹是否存在时,会抛出异常,尽管目录D:\installation\CAL
存在:
ERROR in custom action myFunction System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Windows\Installer\MSID839.tmp-\D:\installation\CAL'.
无论CustomAcion是立即执行还是延迟执行,都会发生这种情况。 C:\Windows\Installer\MSID839.tmp-\
似乎是已执行程序集的路径,但我当然不希望将其作为FullPath的一部分。我怎么能摆脱它?
CustomAction和属性定义如下:
<CustomAction Id='myCA' BinaryKey='myCABin' DllEntry='myFunction' Execute="deferred" HideTarget="no" Impersonate="no"/>
<Property Id="myCA" Value="Arg1=[CURRENTDIRECTORY];Arg2=[INSTALLDIR]" />
参数的使用如下:
CustomActionData data = session.CustomActionData;
string srcDir = data["Arg1"]+ "\\CAL";
string destDir = data["Arg2"]+ "\\CAL";
if (Directory.Exists(srcDir))
// copy files
答案 0 :(得分:0)
我重新创建了你的应用,它运行正常。这是我的wix代码(它在我的产品节点中):
<CustomAction Id='Test' BinaryKey='RegistryHelperCA' DllEntry='Test' Execute="deferred" HideTarget="no" Impersonate="no"/>
<Property Id="Test" Value="Arg1=[CURRENTDIRECTORY];Arg2=[INSTALLDIR]" />
<InstallExecuteSequence>
<Custom Action="Test" After="InstallFiles"></Custom>
</InstallExecuteSequence>
我的自定义操作:
[CustomAction("Test")]
public static ActionResult Test(Session session)
{
string dir = session.CustomActionData["Arg1"];
session.Log("DIRECTORY equals " + dir);
if (Directory.Exists(dir))
session.Log("Success");
return ActionResult.Success;
}
它将dir吐出C:\Users\user\Desktop
。确认您没有在任何地方分配到CURRENTDIRECTORY
媒体资源,如果找不到任何内容,请尝试将自定义操作设置为Execute="immediate"
并访问此类数据
string srcDir = session["CURRENTDIRECTORY"]+ "\\CAL";
如果这不起作用,肯定会在某处覆盖该属性。祝你好运!
答案 1 :(得分:0)
在一些试错会后,我发现$userdata = array(
'user_login' => $_POST["post_email"],
'first_name' => $_POST["post_voornaam"],
'last_name' => $_POST["post_achternaam"],
'user_email' => $_POST["post_email"],
'user_pass' => $_POST["password_confirm"]
);
$user_id = wp_insert_user( $userdata ) ;
add_user_meta( $user_id, 'klant_id', $klant_id );
和Directory.Exists(srcDir)
没有用,因为不是值而是属性名称作为参数传递给{{ 1}}函数 - 与正确生成值的Directory.Exists(destDir)
形成对比。
最后,我最终设置Exist()
并检索如下值:
session.Log(srcDir)